diff --git a/R/gilded_rose.R b/R/gilded_rose.R new file mode 100644 index 00000000..3d639dda --- /dev/null +++ b/R/gilded_rose.R @@ -0,0 +1,56 @@ +source('item.R') + +update_quality <- function(items) { + lapply(items, + function(item) { + + if (item$name != "Aged Brie" && item$name != "Backstage passes to a TAFKAL80ETC concert") { + if (item$quality > 0) { + if (item$name != "Sulfuras, Hand of Ragnaros") { + item$quality <- item$quality - 1 + } + } + } else { + if (item$quality < 50) { + item$quality <- item$quality + 1 + if (item$name == "Backstage passes to a TAFKAL80ETC concert") { + if (item$sell_in < 11) { + if (item$quality < 50) { + item$quality = item$quality + 1 + } + } + if (item$sell_in < 6) { + if (item$quality < 50) { + item$quality = item$quality + 1 + } + } + } + } + } + + if (item$name != "Sulfuras, Hand of Ragnaros") { + item$sell_in <- item$sell_in - 1 + } + + if (item$sell_in < 0) { + if (item$name != "Aged Brie") { + if (item$name != "Backstage passes to a TAFKAL80ETC concert") { + if (item$quality > 0) { + if (item$name != "Sulfuras, Hand of Ragnaros") { + item$quality <- item$quality - 1 + } + } + } else { + item$quality <- item$quality - item$quality + } + } else { + if (item$quality < 50) { + item$quality <- item$quality + 1 + } + } + } + + item + } + ) +} diff --git a/R/item.R b/R/item.R new file mode 100644 index 00000000..51cc90dc --- /dev/null +++ b/R/item.R @@ -0,0 +1,13 @@ +item <- function(name, sell_in, quality) { + newItem <- list(name=name, sell_in=sell_in, quality=quality) + class(newItem) <- 'item' + newItem +} + +as.character.item <- function(item) { + paste(item$name, ", ", item$sell_in, ", ", item$quality, sep='') +} + +print.item <- function(item) { + print.default(as.character(item)) +} diff --git a/R/runit_gilded_rose.R b/R/runit_gilded_rose.R new file mode 100644 index 00000000..a0004b7c --- /dev/null +++ b/R/runit_gilded_rose.R @@ -0,0 +1,7 @@ +source('gilded_rose.R') + +test.foo <- function() { + items <- list( item('foo', 0, 0) ) + items <- update_quality(items) + checkEquals('fixme', items[[1]]$name); +} diff --git a/R/test_setup.R b/R/test_setup.R new file mode 100644 index 00000000..fc62610e --- /dev/null +++ b/R/test_setup.R @@ -0,0 +1,7 @@ +# A little helper script to get the testing infrastructure started + +# install.packages("RUnit") +require(RUnit) + +# execute single test file +runTestFile("runit_gilded_rose.R") diff --git a/R/texttest_fixture.R b/R/texttest_fixture.R new file mode 100644 index 00000000..ec635e6e --- /dev/null +++ b/R/texttest_fixture.R @@ -0,0 +1,33 @@ +rm(list=ls()) + +source('gilded_rose.R') + +writeLines('OMGHAI!') + +items <- list( + item('+5 Dexterity Vest', 10, 20), + item('Aged Brie', 2, 0), + item('Elixir of the Mongoose', 5, 7), + item('Sulfuras, Hand of Ragnaros', 0, 80), + item('Sulfuras, Hand of Ragnaros', -1, 80), + item('Backstage passes to a TAFKAL80ETC concert', 15, 20), + item('Backstage passes to a TAFKAL80ETC concert', 10, 49), + item('Backstage passes to a TAFKAL80ETC concert', 5, 49), + # This Conjured item does not work properly yet + item('Conjured Mana Cake', 3, 6) +) + +days <- 2 +for (day in 0:days) { + writeLines(paste('-------- day ', day, ' --------', sep='')) + writeLines('name, sellIn, quality') + lapply(items, + function(item) { + writeLines(as.character(item)) + } + ) + writeLines('') + items <- update_quality(items) +} + +rm('day', 'days', 'items')