Further Amendments

- removed the cond statement and replaced with nested ifs
- removed the let statement. Data is now accesses directly
- update-quality now takes a list of items
This commit is contained in:
mgd 2024-10-09 00:50:47 +01:00 committed by Peter Kofler
parent 91ebc85a70
commit e9cf5311fd
2 changed files with 24 additions and 20 deletions

View File

@ -1,10 +1,10 @@
(require 'ert) (require 'ert)
(require 'gilded-rose) (require 'gilded-rose)
(setq item-list
(defconst foo (make-item "foo" 20 10)) (list (make-item "foo" 5 5)))
(ert-deftest check-name-of-item () (ert-deftest check-name-of-item ()
(should (string= "fixme" (plist-get foo :name)))) (should (string= "fixme" (plist-get (car item-list) :name))))
(ert-run-tests-interactively t) (ert-run-tests-interactively t)

View File

@ -2,22 +2,26 @@
"Create an item with NAME, SELL-IN, and QUALITY." "Create an item with NAME, SELL-IN, and QUALITY."
(list :name name :sell-in sell-in :quality quality)) (list :name name :sell-in sell-in :quality quality))
(defun update-quality (item) (defun update-quality (items)
(let* ((quality (plist-get item :quality)) (dolist (item items)
(sell-in (plist-get item :sell-in)) (if (string= (plist-get item :name) "Aged Brie")
(name (plist-get item :name))) (plist-put item :quality (min 50 (1+ (plist-get item :quality))))
(cond
((string= name "Aged Brie") (if (string= (plist-get item :name) "Backstage passes")
(setf (nth 2 item) (min 50 (1+ quality)))) (if (> (plist-get item :sell-in) 10)
((string= name "Backstage passes") (plist-put item :quality (plist-get item :quality))
(cond
((> sell-in 10) (setf (nth 2 item) quality)) (if (and (<= (plist-get item :sell-in) 10) (> (plist-get item :sell-in) 5))
((and (<= sell-in 10) (> sell-in 5)) (setf (nth 2 item) (min 50 (+ quality 2)))) (plist-put item :quality (min 50 (+ (plist-get item :quality) 2)))
((and (<= sell-in 5) (> sell-in 0)) (setf (nth 2 item) (min 50 (+ quality 3))))
(t (setf (nth 2 item) 0)))) (if (and (<= (plist-get item :sell-in) 5) (> (plist-get item :sell-in) 0))
((string= name "Sulfuras") (plist-put item :quality (min 50 (+ (plist-get item :quality) 3)))
(setf (nth 2 item) quality))
(t (plist-put item :quality 0))))
(setf (nth 2 item) (max 0 (1- quality)))))))
(if (string= (plist-get item :name) "Sulfuras")
(plist-put item :quality (plist-get item :quality))
(plist-put item :quality (max 0 (1- (plist-get item :quality)))))))))
(provide 'gilded-rose) (provide 'gilded-rose)