summaryrefslogtreecommitdiffstats
path: root/tests/test.lisp
blob: a98e0dbb61fb64f24a1b2f02379d2fc5b1be10cd (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
(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")))))))

;; creating inventory adding


;;; 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 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 kar 1)))
	(is (= 10
		   (inventory:filled (player::stock p))))
	(is (player:buy-item p c2 10))
	(is (= 20
		   (inventory:filled (player::stock p))))
	))