mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-11 20:02:09 +00:00
80 lines
3.0 KiB
Zig
80 lines
3.0 KiB
Zig
const std = @import("std");
|
|
|
|
pub const Item = struct {
|
|
name: []const u8,
|
|
sell_in: i32,
|
|
quality: i32,
|
|
|
|
pub fn init(name: []const u8, sell_in: i32, quality: i32) Item {
|
|
return Item{
|
|
.name = name,
|
|
.sell_in = sell_in,
|
|
.quality = quality,
|
|
};
|
|
}
|
|
};
|
|
|
|
pub const GildedRose = struct {
|
|
items: []Item,
|
|
|
|
pub fn init(items: []Item) GildedRose {
|
|
return GildedRose{ .items = items };
|
|
}
|
|
|
|
pub fn updateQuality(self: *GildedRose) []Item {
|
|
for (0..self.items.len) |i| {
|
|
if (!std.mem.eql(u8, self.items[i].name, "Aged Brie") and !std.mem.eql(u8, self.items[i].name, "Backstage passes to a TAFKAL80ETC concert")) {
|
|
if (self.items[i].quality > 0) {
|
|
if (!std.mem.eql(u8, self.items[i].name, "Sulfuras, Hand of Ragnaros")) {
|
|
self.items[i].quality = self.items[i].quality - 1;
|
|
}
|
|
}
|
|
} else {
|
|
if (self.items[i].quality < 50) {
|
|
self.items[i].quality = self.items[i].quality + 1;
|
|
if (std.mem.eql(u8, self.items[i].name, "Backstage passes to a TAFKAL80ETC concert")) {
|
|
if (self.items[i].sell_in < 11) {
|
|
if (self.items[i].quality < 50) {
|
|
self.items[i].quality = self.items[i].quality + 1;
|
|
}
|
|
}
|
|
if (self.items[i].sell_in < 6) {
|
|
if (self.items[i].quality < 50) {
|
|
self.items[i].quality = self.items[i].quality + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!std.mem.eql(u8, self.items[i].name, "Sulfuras, Hand of Ragnaros")) {
|
|
self.items[i].sell_in = self.items[i].sell_in - 1;
|
|
}
|
|
if (self.items[i].sell_in < 0) {
|
|
if (!std.mem.eql(u8, self.items[i].name, "Aged Brie")) {
|
|
if (!std.mem.eql(u8, self.items[i].name, "Backstage passes to a TAFKAL80ETC concert")) {
|
|
if (self.items[i].quality > 0) {
|
|
if (!std.mem.eql(u8, self.items[i].name, "Sulfuras, Hand of Ragnaros")) {
|
|
self.items[i].quality = self.items[i].quality - 1;
|
|
}
|
|
}
|
|
} else {
|
|
self.items[i].quality = self.items[i].quality - self.items[i].quality;
|
|
}
|
|
} else {
|
|
if (self.items[i].quality < 50) {
|
|
self.items[i].quality = self.items[i].quality + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return self.items;
|
|
}
|
|
};
|
|
|
|
test "updateQuality" {
|
|
var items = [_]Item{Item.init("foo", 0, 0)};
|
|
var app = GildedRose.init(&items);
|
|
_ = app.updateQuality();
|
|
try std.testing.expectEqualStrings("fixme", items[0].name);
|
|
}
|