mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 20:32:15 +00:00
Inital commit for elisp version of kata
This commit is contained in:
parent
e57f845bfb
commit
478bfae574
68
elisp/gilded-rose-test.el
Normal file
68
elisp/gilded-rose-test.el
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
(require 'ert)
|
||||||
|
(require 'gilded-rose)
|
||||||
|
|
||||||
|
(ert-deftest test-aged-brie-increases-quality ()
|
||||||
|
"Test that Aged Brie increases in quality."
|
||||||
|
(let ((item (make-item "Aged Brie" 2 0)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 1))))
|
||||||
|
|
||||||
|
(ert-deftest test-aged-brie-max-quality ()
|
||||||
|
"Test that Aged Brie does not exceed max quality."
|
||||||
|
(let ((item (make-item "Aged Brie" 2 50)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 50))))
|
||||||
|
|
||||||
|
(ert-deftest test-backstage-passes-increases-quality ()
|
||||||
|
"Test that Backstage passes increase in quality."
|
||||||
|
(let ((item (make-item "Backstage passes" 15 20)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 20))))
|
||||||
|
|
||||||
|
(ert-deftest test-backstage-passes-quality-increases-by-2 ()
|
||||||
|
"Test that Backstage passes increase by 2 when sell-in is 10 or less."
|
||||||
|
(let ((item (make-item "Backstage passes" 10 20)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 22))))
|
||||||
|
|
||||||
|
(ert-deftest test-backstage-passes-quality-increases-by-3 ()
|
||||||
|
"Test that Backstage passes increase by 3 when sell-in is 5 or less."
|
||||||
|
(let ((item (make-item "Backstage passes" 5 20)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 23))))
|
||||||
|
|
||||||
|
(ert-deftest test-backstage-passes-quality-drops-to-0 ()
|
||||||
|
"Test that Backstage passes drop to 0 after sell-in date."
|
||||||
|
(let ((item (make-item "Backstage passes" 0 20)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 0))))
|
||||||
|
|
||||||
|
(ert-deftest test-normal-item-decreases-quality ()
|
||||||
|
"Test that normal items decrease in quality."
|
||||||
|
(let ((item (make-item "Normal Item" 5 10)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 9))))
|
||||||
|
|
||||||
|
(ert-deftest test-normal-item-quality-decreases-twice-after-sell-in ()
|
||||||
|
"Test that normal items decrease in quality by 2 after sell-in date."
|
||||||
|
(let ((item (make-item "Normal Item" 0 10)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 8))))
|
||||||
|
|
||||||
|
(ert-deftest test-sulfuras-quality-unchanged ()
|
||||||
|
"Test that Sulfuras quality remains unchanged."
|
||||||
|
(let ((item (make-item "Sulfuras" 0 80)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 80))))
|
||||||
|
|
||||||
|
(ert-deftest test-normal-item-quality-never-negative ()
|
||||||
|
"Test that normal items' quality never goes negative."
|
||||||
|
(let ((item (make-item "Normal Item" 0 0)))
|
||||||
|
(update-quality item)
|
||||||
|
(should (= (item-quality item) 0))))
|
||||||
|
|
||||||
|
(ert-deftest simple-test ()
|
||||||
|
(should (= 1 1)))
|
||||||
|
|
||||||
|
;; Run the tests
|
||||||
|
(ert-run-tests-interactively t)
|
||||||
42
elisp/gilded-rose.el
Normal file
42
elisp/gilded-rose.el
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
(defun make-item (name sell-in quality)
|
||||||
|
"Create an item with NAME, SELL-IN, and QUALITY."
|
||||||
|
(list :name name :sell-in sell-in :quality quality))
|
||||||
|
|
||||||
|
(defun item-name (item)
|
||||||
|
"Return the name of ITEM."
|
||||||
|
(plist-get item :name))
|
||||||
|
|
||||||
|
(defun item-sell-in (item)
|
||||||
|
"Return the sell-in value of ITEM."
|
||||||
|
(plist-get item :sell-in))
|
||||||
|
|
||||||
|
(defun item-quality (item)
|
||||||
|
"Return the quality of ITEM."
|
||||||
|
(plist-get item :quality))
|
||||||
|
|
||||||
|
(defun update-quality (item)
|
||||||
|
"Update the quality of the ITEM according to the Gilded Rose rules."
|
||||||
|
(let ((quality (item-quality item))
|
||||||
|
(sell-in (item-sell-in item)))
|
||||||
|
(cond
|
||||||
|
;; Aged Brie
|
||||||
|
((string= (item-name item) "Aged Brie")
|
||||||
|
(setf (nth 2 item) (min 50 (1+ quality))))
|
||||||
|
|
||||||
|
;; Backstage passes
|
||||||
|
((string= (item-name item) "Backstage passes")
|
||||||
|
(cond
|
||||||
|
((> sell-in 10) (setf (nth 2 item) quality))
|
||||||
|
((and (<= sell-in 10) (> sell-in 5)) (setf (nth 2 item) (min 50 (+ quality 2))))
|
||||||
|
((and (<= sell-in 5) (> sell-in 0)) (setf (nth 2 item) (min 50 (+ quality 3))))
|
||||||
|
(t (setf (nth 2 item) 0))))
|
||||||
|
|
||||||
|
;; Sulfuras
|
||||||
|
((string= (item-name item) "Sulfuras")
|
||||||
|
(setf (nth 2 item) quality)) ;; Sulfuras never changes
|
||||||
|
|
||||||
|
|
||||||
|
(defvar fork (make-item "fork" 10 10))
|
||||||
|
(update-quality fork)
|
||||||
|
(item-quality fork)
|
||||||
|
(provide 'gilded-rose)
|
||||||
Loading…
Reference in New Issue
Block a user