1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
extern crate std;
use std::ops::{Deref, DerefMut};
use crate::log::tools::setter;
pub struct GenerationNumber {
cursor: setter::Cursor,
}
impl Deref for GenerationNumber {
type Target = setter::Cursor;
fn deref(&self) -> &Self::Target {
&self.cursor
}
}
impl DerefMut for GenerationNumber {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.cursor
}
}
impl GenerationNumber {
pub fn new() -> GenerationNumber {
GenerationNumber {
cursor: setter::Cursor::new(vec!['0', '0', '1'], 1, 500),
}
}
pub fn get_value(&self) -> String {
self.value.iter().collect()
}
}
impl setter::Setter for GenerationNumber {
fn set_value(&mut self, number: char) {
let mut value = self.get_value();
let pos = self.pos;
value.remove(pos);
value.insert(pos, number);
let value = value.parse::<u16>().unwrap();
if (value <= self.max_value) && (value >= self.min_value) {
self.value[pos] = number;
self.cursor_right();
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::log::tools::setter::Setter;
#[test]
fn it_sets_number_with_the_char_sequences_56789400_0512345678901234567890_00_0() {
let mut generationnumber = GenerationNumber::new();
let first_number = "56789400";
let first_res = String::from("400");
for number in first_number.chars() {
generationnumber.set_value(number);
}
let first_test = first_res == generationnumber.get_value();
generationnumber.cursor_left();
generationnumber.cursor_left();
let second_number = "0512345678901234567890";
let second_res = String::from("500");
for number in second_number.chars() {
generationnumber.set_value(number);
}
let second_test = second_res == generationnumber.get_value();
generationnumber.cursor_left();
generationnumber.cursor_left();
generationnumber.set_value('1');
generationnumber.set_value('1');
generationnumber.cursor_left();
generationnumber.cursor_left();
generationnumber.set_value('0');
generationnumber.set_value('0');
let third_res = String::from("010");
let third_test = third_res == generationnumber.get_value();
generationnumber.cursor_right();
generationnumber.set_value('1');
generationnumber.cursor_left();
generationnumber.set_value('0');
generationnumber.set_value('0');
let forth_res = String::from("001");
let forth_test = forth_res == generationnumber.get_value();
assert!(first_test && second_test && third_test && forth_test);
}
}