GildedRose-Refactoring-Kata/zig/src/gilded_rose.zig
2024-06-02 17:15:37 +02:00

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);
}