#[macro_use(incr, decr)] extern crate ohmers;
extern crate redis;
extern crate rustc_serialize;
use ohmers::{Ohmer, Counter};
use rustc_serialize::Encodable;
#[derive(RustcEncodable, RustcDecodable, PartialEq, Debug)]
struct Candidate {
id: usize,
positive_votes: Counter,
negative_votes: Counter,
}
impl Default for Candidate {
fn default() -> Self {
Candidate {
id: 0,
positive_votes: Counter,
negative_votes: Counter,
}
}
}
impl Ohmer for Candidate {
fn id(&self) -> usize { self.id }
fn set_id(&mut self, id: usize) { self.id = id; }
}
#[test]
fn test_counter() {
let client = redis::Client::open("redis://127.0.0.1/").unwrap();
let mut candidate = Candidate::default();
assert!(candidate.positive_votes.incr(&candidate, "positive_votes", 1, &client).is_err());
candidate.save(&client).unwrap();
assert_eq!(candidate.positive_votes.incr(&candidate, "positive_votes", 1, &client).unwrap(), 1);
assert_eq!(candidate.positive_votes.incr(&candidate, "positive_votes", 1, &client).unwrap(), 2);
assert_eq!(candidate.positive_votes.get(&candidate, "positive_votes", &client).unwrap(), 2);
assert_eq!(candidate.positive_votes.get(&candidate, "positive_votes", &client).unwrap(), 2);
assert_eq!(candidate.negative_votes.get(&candidate, "negative_votes", &client).unwrap(), 0);
assert_eq!(incr!(candidate.negative_votes, 1, &client).unwrap(), 1);
assert_eq!(incr!(candidate.positive_votes, &client).unwrap(), 3);
assert_eq!(decr!(candidate.positive_votes, &client).unwrap(), 2);
}