(in-package :transacc-tests) ;;; 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")))))))