Add rust version

This commit is contained in:
Michael Gerhaeuser 2015-10-03 21:11:56 +02:00
parent 3cb8ec5871
commit 52d3d5607a
6 changed files with 130 additions and 0 deletions

1
rust/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
target/

4
rust/Cargo.lock generated Normal file
View File

@ -0,0 +1,4 @@
[root]
name = "rust"
version = "0.1.0"

4
rust/Cargo.toml Normal file
View File

@ -0,0 +1,4 @@
[package]
name = "rust"
version = "0.1.0"
authors = ["Michael Gerhaeuser <michael.gerhaeuser@gmail.com>"]

View File

@ -0,0 +1,80 @@
use std::string;
use std::vec;
pub struct Item {
pub name: string::String,
pub sell_in: i32,
pub quality: i32
}
impl Item {
pub fn new(name: String, sell_in: i32, quality: i32) -> Item {
Item {name: name, sell_in: sell_in, quality: quality}
}
}
pub struct GildedRose {
pub items: vec::Vec<Item>
}
impl GildedRose {
pub fn new(items: vec::Vec<Item>) -> GildedRose {
GildedRose {items: items}
}
pub fn update_quality(&mut self) {
for item in &mut self.items {
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;
}
}
}
}
}
}
#[cfg(test)]
mod test;

View File

@ -0,0 +1,10 @@
use super::{Item, GildedRose};
#[test]
pub fn foo() {
let items = vec![Item::new(String::from("foo"), 0, 0)];
let mut rose = GildedRose::new(items);
rose.update_quality();
assert_eq!("fixme", rose.items[0].name);
}

31
rust/src/main.rs Normal file
View File

@ -0,0 +1,31 @@
mod gildedrose;
use gildedrose::{Item, GildedRose};
fn main() {
let items = vec![
Item::new(String::from("+5 Dexterity Vest"), 10, 20),
Item::new(String::from("Aged Brie"), 2, 0),
Item::new(String::from("Elixir of the Mongoose"), 5, 7),
Item::new(String::from("Sulfuras, Hand of Ragnaros"), 0, 80),
Item::new(String::from("Sulfuras, Hand of Ragnaros"), -1, 80),
Item::new(String::from("Backstage passes to a TAFKAL80ETC concert"), 15, 20),
Item::new(String::from("Backstage passes to a TAFKAL80ETC concert"), 10, 49),
Item::new(String::from("Backstage passes to a TAFKAL80ETC concert"), 5, 49),
// this conjured item does not work properly yet
Item::new(String::from("Conjured Mana Cake"), 3, 6)
];
let mut rose = GildedRose::new(items);
println!("OMGHAI!");
for i in (0..30) {
println!("-------- day {} --------", i);
println!("name, sellIn, quality");
for item in &rose.items {
println!("{}, {}, {}", item.name, item.sell_in, item.quality);
}
println!("");
rose.update_quality();
}
}