(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)))) ))