From 91ebc85a70e08481a7a9f3eb2edb9c9b56cf3dd7 Mon Sep 17 00:00:00 2001 From: mgd Date: Mon, 7 Oct 2024 21:22:57 +0100 Subject: [PATCH] * Amendments - Initial test modified to be similar to Clojure version - update-quality modified to read from make-item directly. Helper methods removed --- elisp/gilded-rose-test.el | 7 ++++--- elisp/gilded-rose.el | 31 ++++++++----------------------- elisp/readme.org | 3 +++ 3 files changed, 15 insertions(+), 26 deletions(-) diff --git a/elisp/gilded-rose-test.el b/elisp/gilded-rose-test.el index 404d9f67..3d982f7a 100644 --- a/elisp/gilded-rose-test.el +++ b/elisp/gilded-rose-test.el @@ -1,9 +1,10 @@ (require 'ert) (require 'gilded-rose) + +(defconst foo (make-item "foo" 20 10)) + (ert-deftest check-name-of-item () - "Test that item is called sweets. This test should fail!" - (let ((sweets (make-item "sweets" 5 5))) - (should (string= (item-name sweets) "You should change this")))) + (should (string= "fixme" (plist-get foo :name)))) (ert-run-tests-interactively t) diff --git a/elisp/gilded-rose.el b/elisp/gilded-rose.el index 9f3ae85b..c56e1280 100644 --- a/elisp/gilded-rose.el +++ b/elisp/gilded-rose.el @@ -2,37 +2,22 @@ "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))) + (let* ((quality (plist-get item :quality)) + (sell-in (plist-get item :sell-in)) + (name (plist-get item :name))) (cond - ;; Aged Brie - ((string= (item-name item) "Aged Brie") + ((string= name "Aged Brie") (setf (nth 2 item) (min 50 (1+ quality)))) - - ;; Backstage passes - ((string= (item-name item) "Backstage passes") + ((string= name "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") + ((string= name "Sulfuras") (setf (nth 2 item) quality)) + (t + (setf (nth 2 item) (max 0 (1- quality))))))) (provide 'gilded-rose) diff --git a/elisp/readme.org b/elisp/readme.org index 3b09a512..19187d8a 100644 --- a/elisp/readme.org +++ b/elisp/readme.org @@ -8,3 +8,6 @@ Gilded Rose kata in Elisp! - Use the command ~eval-buffer~ on ~gilded-rose.el~ - Use the command ~eval-buffer~ on ~gilded-rose-test.el~ - Test can be run interactively using the command ~ert~ or with ~(ert-run-tests-interactively t)~ + +* Todo +- Add TestText fixture