mirror of
https://github.com/ricoriedel/wipe.git
synced 2024-11-17 21:46:39 +00:00
Add trait for mocking
This commit is contained in:
parent
0e0f012810
commit
e6e1c6fb25
51
src/char.rs
51
src/char.rs
@ -1,22 +1,55 @@
|
|||||||
/// Used to get a character with a given brightness.
|
/// Used to get a character with a given brightness.
|
||||||
pub struct CharSampler {
|
pub trait CharSampler {
|
||||||
|
/// Gets a character with the given brightness.
|
||||||
|
/// # Arguments
|
||||||
|
/// * `level`: `0 <= level` and `level < 1`
|
||||||
|
fn sample(&self, level: f32) -> char;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SimpleCharSampler {
|
||||||
chars: String
|
chars: String
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CharSampler {
|
impl SimpleCharSampler {
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
/// * `chars`: The characters ordered by brightness.
|
/// * `chars`: The characters ordered by brightness.
|
||||||
pub fn new(chars: String) -> Self {
|
pub fn new(chars: String) -> Self {
|
||||||
Self { chars }
|
Self { chars }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Gets a character with the given brightness.
|
impl CharSampler for SimpleCharSampler {
|
||||||
/// # Arguments
|
fn sample(&self, level: f32) -> char {
|
||||||
/// * `level`: `0 <= level` and `level < 1`
|
let index = level * self.chars.chars().count() as f32;
|
||||||
pub fn sample(&self, level: f32) -> char {
|
|
||||||
let pos = level * self.chars.chars().count() as f32;
|
|
||||||
let index = pos as usize;
|
|
||||||
|
|
||||||
self.chars.chars().nth(index).unwrap()
|
assert!(index >= 0.0);
|
||||||
|
|
||||||
|
self.chars.chars().nth(index as usize).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sample() {
|
||||||
|
let sampler = SimpleCharSampler::new("abc".to_string());
|
||||||
|
|
||||||
|
assert_eq!('a', sampler.sample(0.1));
|
||||||
|
assert_eq!('b', sampler.sample(0.4));
|
||||||
|
assert_eq!('c', sampler.sample(0.7));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn sample_index_negative() {
|
||||||
|
SimpleCharSampler::new("abc".to_string()).sample(-0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn sample_index_equals_one() {
|
||||||
|
SimpleCharSampler::new("abc".to_string()).sample(1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user