summaryrefslogtreecommitdiffstats
path: root/tests/test.lisp
blob: 496196241b57a694f6c49d49e927131c2055d412 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
(in-package :cl-user)
(defpackage transacc-tests
  (:use :cl
        :fiveam))
(in-package :transacc-tests)

(def-suite transacc-suite
	:description "Test transacc")


;;; TESTING COMMODITIES
(def-suite* commodities-suite
	:description "Test object and methods for commodities"
	:in transacc-suite)

;; we make sure creating a commodity returns one
(test commodity-creation
  (let ((c1 (commodities:new-commodity "apple" 1))
		(c2 (commodities:new-commodity "pear" 4))
		(c3 (commodities:new-commodity "petrol" -3))
		(c4 (commodities:new-commodity "void" 0)))
	(is (equal (type-of c1) 'commodities::commodity))
	(is (equal (type-of c2) 'commodities::commodity))
	(is (eq c3 nil))
	(is (eq c4 nil))))

;; we make sure a commodity created with given values
;; in fact contains said values
(test commodity-values
  (let ((c (commodities:new-commodity "car" 10000)))
	(is (equal (commodities:name c) "car"))
	(is (= (commodities:price c) 10000))))


;;; TESTING INVENTORY
(def-suite* inventory-suite
	:description "Test object and methods for inventory"
	:in transacc-suite)

;; test for creation of inventories
(test inventory-creation
  (let ((i1 (inventory:new-inventory 100))
		(i2 (inventory:new-inventory 25))
		(i3 (inventory:new-inventory -100))
		(i4 (inventory:new-inventory 0)))
	(is (eq (type-of i1) 'inventory::inventory))
	(is (eq (type-of i2) 'inventory::inventory))
	(is (eq i3 nil))
	(is (eq i4 nil))))

;; test for init values
(test inventory-init-values
  (let ((i (inventory:new-inventory 100)))
	(is (= (inventory::size i) 100))
	(is (= (inventory:filled i) 0))
	(is (eq (inventory::items i) nil))))

;; test add and substract
(test inventory-add-and-substract
  (let ((i (inventory:new-inventory 100))
		(c (commodities:new-commodity "apple" 1))
		(c2 (commodities:new-commodity "apple" 99)))
	;; add 10
	(is (= (inventory:add-item i c 10) 10))
	(is (= (inventory:filled i) 10))
	;; remove 4
	(is (equal (inventory:remove-item i "apple" 4)
			   (cons c 4)))
	(is (= (inventory:filled i) 6))
	(is (equal (inventory::find-item i "apple")
			   (cons c 6)))
	;; adding 90
	(is (= (inventory:add-item i c 90) 96))
	;; adding one too many
	(is (not (inventory:add-item i c 5)))
	(is (= (inventory::filled i) 96))
	(is (and
		 (commodities:commodity-eq
		  c
		  (car (inventory::find-item i "apple")))
		 (= 96 (cdr (inventory::find-item i "apple")))))
	;; test for adding differently priced same item
	(is (= 1
		   (commodities:price
			(car (inventory::find-item i "apple")))))
	(inventory:remove-item i "apple" 46)
	(is (= 100
		   (inventory:add-item i c2 50)))
	(is (= 50
		   (commodities:price
			(car (inventory::find-item i "apple")))))))


;;; Player tests
(def-suite* player-suite
	:description "Test object and methods for player"
	:in transacc-suite)

;; testing buy-item
(test creating-player
  (let ((p (player:init-player "Joze"))
		(p2 (player:init-player "Mehmout" 555 8976)))
	(is (equal (type-of p) 'player::player))
	(is (equal (player:name p) "Joze"))
	(is (= (player:cash p) 2000))
	(is (= (player:debt p) 5000))
	(is (equal (type-of p2) 'player::player))
	(is (equal (player:name p2) "Mehmout"))
	(is (= (player:cash p2) 555))
	(is (= (player:debt p2) 8976))))

(test repay-debt
  (let ((p (player::init-player "Joze"))
		(p2 (player::init-player "Mehmout")))
	(is (player::repay-debt p 1000))
	(is (player::repay-debt p 1000))
	(is (not (player::repay-debt p2 3000)))))

(test buy-item
  (let ((p (player:init-player "Joze"))
		(c (commodities:new-commodity "apple" 5))
		(c2 (commodities:new-commodity "apple" 11))
		(truck (commodities:new-commodity "truck" 100000)))
	(is (player:buy-item p c 10))
	(is (not (player:buy-item p truck 1)))
	(is (= 10
		   (inventory:filled (player::stock p))))
	(is (player:buy-item p c2 10))
	(is (= 20
		   (inventory:filled (player::stock p))))))