Skip to content

Instantly share code, notes, and snippets.

@zummenix
Last active December 23, 2015 13:02
Show Gist options
  • Save zummenix/16d888c891ea248d5c86 to your computer and use it in GitHub Desktop.
Save zummenix/16d888c891ea248d5c86 to your computer and use it in GitHub Desktop.
#[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