Last active
December 23, 2015 13:02
-
-
Save zummenix/16d888c891ea248d5c86 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[cfg(test)] | |
#[macro_use(expect)] | |
extern crate expectest; | |
use std::fmt; | |
#[cfg(not(test))] | |
fn main() { | |
let data = r#" | |
billowy | |
biopsy | |
chinos | |
defaced | |
chintz | |
sponged | |
bijoux | |
abhors | |
fiddle | |
begins | |
chimps | |
wronged | |
"#; | |
for word in data.lines().map(|line| line.trim()).filter(|word| !word.is_empty()) { | |
println!("{}\t{}", word, order_status(word)); | |
} | |
} | |
#[derive(Debug, PartialEq)] | |
pub enum OrderStatus { | |
InOrder, | |
ReverseOrder, | |
NotInOrder, | |
} | |
impl fmt::Display for OrderStatus { | |
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { | |
let status = match *self { | |
OrderStatus::InOrder => "IN ORDER", | |
OrderStatus::ReverseOrder => "REVERSE ORDER", | |
OrderStatus::NotInOrder => "NOT IN ORDER", | |
}; | |
fmt.write_str(status) | |
} | |
} | |
pub fn order_status(word: &str) -> OrderStatus { | |
if word.chars().zip(word.chars().skip(1)).all(|(a, b)| a <= b) { | |
OrderStatus::InOrder | |
} else if word.chars().zip(word.chars().skip(1)).all(|(a, b)| a >= b) { | |
OrderStatus::ReverseOrder | |
} else { | |
OrderStatus::NotInOrder | |
} | |
} | |
#[cfg(test)] | |
mod tests { | |
use super::*; | |
use expectest::prelude::*; | |
#[test] | |
fn in_order() { | |
expect!(order_status("abc")).to(be_equal_to(OrderStatus::InOrder)); | |
expect!(order_status("b")).to(be_equal_to(OrderStatus::InOrder)); | |
expect!(order_status("bb")).to(be_equal_to(OrderStatus::InOrder)); | |
} | |
#[test] | |
fn reverse_order() { | |
expect!(order_status("cba")).to(be_equal_to(OrderStatus::ReverseOrder)); | |
expect!(order_status("cbb")).to(be_equal_to(OrderStatus::ReverseOrder)); | |
expect!(order_status("cca")).to(be_equal_to(OrderStatus::ReverseOrder)); | |
} | |
#[test] | |
fn not_in_order() { | |
expect!(order_status("cda")).to(be_equal_to(OrderStatus::NotInOrder)); | |
expect!(order_status("abcba")).to(be_equal_to(OrderStatus::NotInOrder)); | |
expect!(order_status("abcbc")).to(be_equal_to(OrderStatus::NotInOrder)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment