From a91a6ef6953f40308bad17d8c5bfc5ffca000c16 Mon Sep 17 00:00:00 2001 From: Peter Kofler Date: Fri, 13 Dec 2024 01:33:28 +0100 Subject: [PATCH] Initial port. --- io/io/GildedRose.io | 65 ++++++++++++++++++++++++++ io/io/Item.io | 19 ++++++++ io/tests/correctness/GildedRoseTest.io | 13 ++++++ 3 files changed, 97 insertions(+) create mode 100644 io/io/GildedRose.io create mode 100644 io/io/Item.io create mode 100644 io/tests/correctness/GildedRoseTest.io diff --git a/io/io/GildedRose.io b/io/io/GildedRose.io new file mode 100644 index 00000000..cace3a17 --- /dev/null +++ b/io/io/GildedRose.io @@ -0,0 +1,65 @@ +GildedRose := Object clone do( + + init := method( + self items := list() + ) + + with := method(items, + result := self clone + result items = items + result + ) + + updateQuality := method( + for(i, 0, items size - 1, + if (items at(i) name != "Aged Brie" and + items at(i) name != "Backstage passes to a TAFKAL80ETC concert", + if (items at(i) quality > 0, + if (items at(i) name != "Sulfuras, Hand of Ragnaros", + items at(i) quality = items at(i) quality - 1 + ) + ) + , + if (items at(i) quality < 50, + items at(i) quality = items at(i) quality + 1 + + if (items at(i) name == "Backstage passes to a TAFKAL80ETC concert", + if (items at(i) sellIn < 11, + if (items at(i) quality < 50, + items at(i) quality = items at(i) quality + 1 + ) + ) + + if (items at(i) sellIn < 6, + if (items at(i) quality < 50, + items at(i) quality = items at(i) quality + 1 + ) + ) + ) + ) + ) + + if (items at(i) name != "Sulfuras, Hand of Ragnaros", + items at(i) sellIn = items at(i) sellIn - 1 + ) + + if (items at(i) sellIn < 0, + if (items at(i) name != "Aged Brie", + if (items at(i) name != "Backstage passes to a TAFKAL80ETC concert", + if (items at(i) quality > 0, + if (items at(i) name != "Sulfuras, Hand of Ragnaros", + items at(i) quality = items at(i) quality - 1 + ) + ) + , + items at(i) quality = items at(i) quality - items at(i) quality + ) + , + if (items at(i) quality < 50, + items at(i) quality = items at(i) quality + 1 + ) + ) + ) + ) + ) +) diff --git a/io/io/Item.io b/io/io/Item.io new file mode 100644 index 00000000..0f683975 --- /dev/null +++ b/io/io/Item.io @@ -0,0 +1,19 @@ +Item := Object clone do( + + name := "" + sellIn := 0 + quality := 0 + + with := method(name, sellIn, quality, + result := self clone + result name = name + result sellIn = sellIn + result quality = quality + result + ) + + asString = method( + self name .. ", " .. self sellIn .. ", " .. self quality + ) + +) diff --git a/io/tests/correctness/GildedRoseTest.io b/io/tests/correctness/GildedRoseTest.io new file mode 100644 index 00000000..3d0f5009 --- /dev/null +++ b/io/tests/correctness/GildedRoseTest.io @@ -0,0 +1,13 @@ +doRelativeFile("../../io/Item.io") +doRelativeFile("../../io/GildedRose.io") + +GildedRoseTest := UnitTest clone do( + + testFoo := method( + items := list( Item with("foo", 0, 0) ) + app := GildedRose with(items) + app updateQuality + assertEquals("fixme", app items at(0) name) + ) + +)