Skip to content

Commit 4738e3e

Browse files
committed
feature: roman numeral tests
1 parent 26e52f0 commit 4738e3e

File tree

5 files changed

+281
-0
lines changed

5 files changed

+281
-0
lines changed

roman-numerals/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/target
2+
**/*.rs.bk

roman-numerals/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "roman-numerals"
3+
version = "0.1.0"
4+
authors = ["Mark Robson <[email protected]>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]

roman-numerals/README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Roman Numeral Converter
2+
3+
The rules are: [rules for roman numerals](https://www.math-only-math.com/rules-for-formation-of-roman-numerals.html). eg:
4+
5+
I = 1
6+
II = 2
7+
III = 3
8+
9+
IV = 4
10+
V = 5
11+
VI = 6
12+
VII = 7
13+
VIII = 8
14+
15+
IX = 9
16+
X = 10
17+
18+
L = 50
19+
20+
C = 100
21+
22+
D = 500
23+
24+
M = 1000
25+
26+
I, X and C cannot be repeated more than 3 times.
27+
28+
V, L and D are not repeated

roman-numerals/src/lib.rs

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
#[cfg(test)]
2+
mod tests {
3+
use super::*;
4+
5+
#[test]
6+
fn returns_empty_for_0 () {
7+
assert_eq!(numeralise(0), "");
8+
}
9+
10+
#[test]
11+
fn returns_i_for_1 () {
12+
assert_eq!(numeralise(1), "I");
13+
}
14+
15+
#[test]
16+
fn returns_ii_for_2 () {
17+
assert_eq!(numeralise(2), "II");
18+
}
19+
20+
#[test]
21+
fn returns_iii_for_3 () {
22+
assert_eq!(numeralise(3), "III");
23+
}
24+
25+
#[test]
26+
fn returns_iv_for_4 () {
27+
assert_eq!(numeralise(4), "IV");
28+
}
29+
30+
#[test]
31+
fn returns_v_for_5 () {
32+
assert_eq!(numeralise(5), "V");
33+
}
34+
35+
#[test]
36+
fn returns_vi_for_6 () {
37+
assert_eq!(numeralise(6), "VI");
38+
}
39+
40+
#[test]
41+
fn returns_vii_for_7 () {
42+
assert_eq!(numeralise(7), "VII");
43+
}
44+
45+
#[test]
46+
fn returns_viii_for_8 () {
47+
assert_eq!(numeralise(8), "VIII");
48+
}
49+
50+
#[test]
51+
fn returns_ix_for_9 () {
52+
assert_eq!(numeralise(9), "IX");
53+
}
54+
55+
#[test]
56+
fn returns_x_for_10 () {
57+
assert_eq!(numeralise(10), "X");
58+
}
59+
60+
#[test]
61+
fn returns_xi_for_11 () {
62+
assert_eq!(numeralise(11), "XI");
63+
}
64+
65+
#[test]
66+
fn returns_xii_for_12 () {
67+
assert_eq!(numeralise(12), "XII");
68+
}
69+
70+
#[test]
71+
fn returns_xiii_for_13 () {
72+
assert_eq!(numeralise(13), "XIII");
73+
}
74+
75+
#[test]
76+
fn returns_xiv_for_14 () {
77+
assert_eq!(numeralise(14), "XIV");
78+
}
79+
80+
#[test]
81+
fn returns_xv_for_15 () {
82+
assert_eq!(numeralise(15), "XV");
83+
}
84+
85+
#[test]
86+
fn returns_xvi_for_16 () {
87+
assert_eq!(numeralise(16), "XVI");
88+
}
89+
90+
#[test]
91+
fn returns_xvii_for_17 () {
92+
assert_eq!(numeralise(17), "XVII");
93+
}
94+
95+
#[test]
96+
fn returns_xviii_for_18 () {
97+
assert_eq!(numeralise(18), "XVIII");
98+
}
99+
100+
#[test]
101+
fn returns_xix_for_19 () {
102+
assert_eq!(numeralise(19), "XIX");
103+
}
104+
105+
#[test]
106+
fn returns_xx_for_20 () {
107+
assert_eq!(numeralise(20), "XX");
108+
}
109+
110+
#[test]
111+
fn returns_xxi_for_21 () {
112+
assert_eq!(numeralise(21), "XXI");
113+
}
114+
115+
#[test]
116+
fn returns_xxxi_for_31 () {
117+
assert_eq!(numeralise(31), "XXXI");
118+
}
119+
120+
#[test]
121+
fn returns_xxxix_for_39 () {
122+
assert_eq!(numeralise(39), "XXXIX");
123+
}
124+
125+
#[test]
126+
fn returns_xxxxi_for_42 () {
127+
assert_eq!(numeralise(42), "XXXXII");
128+
}
129+
130+
#[test]
131+
fn returns_l_for_50 () {
132+
assert_eq!(numeralise(50), "L");
133+
}
134+
135+
#[test]
136+
fn returns_lvii_for_57 () {
137+
assert_eq!(numeralise(57), "LVII");
138+
}
139+
140+
#[test]
141+
fn returns_xcix_for_99 () {
142+
assert_eq!(numeralise(99), "XCIX");
143+
}
144+
145+
#[test]
146+
fn returns_c_for_100 () {
147+
assert_eq!(numeralise(100), "C");
148+
}
149+
150+
#[test]
151+
fn returns_ccciv_for_304 () {
152+
assert_eq!(numeralise(304), "CCCIV");
153+
}
154+
155+
#[test]
156+
fn returns_cd_for_400 () {
157+
assert_eq!(numeralise(400), "CD");
158+
}
159+
160+
#[test]
161+
fn returns_cd_for_401 () {
162+
assert_eq!(numeralise(401), "CDI");
163+
}
164+
165+
#[test]
166+
fn returns_d_for_500 () {
167+
assert_eq!(numeralise(500), "D");
168+
}
169+
170+
#[test]
171+
fn returns_dccc_for_800 () {
172+
assert_eq!(numeralise(800), "DCCC");
173+
}
174+
175+
#[test]
176+
fn returns_cm_for_900 () {
177+
assert_eq!(numeralise(900), "CM");
178+
}
179+
180+
#[test]
181+
fn returns_cmxcix_for_999 () {
182+
assert_eq!(numeralise(999), "CMXCIX");
183+
}
184+
185+
#[test]
186+
fn returns_m_for_m () {
187+
assert_eq!(numeralise(1000), "M");
188+
}
189+
190+
#[test]
191+
fn returns_mmm_for_m () {
192+
assert_eq!(numeralise(3000), "MMM");
193+
}
194+
}
195+
196+
fn numeralise(number: u32) -> String {
197+
let mut numeral: String = "".to_string();
198+
let mut counter = number;
199+
while counter > 0 {
200+
if counter < 4 {
201+
numeral = [numeral, "I".to_string()].join("");
202+
counter -= 1;
203+
} else if counter == 4 {
204+
numeral = [numeral, "IV".to_string()].join("");
205+
counter -= 4;
206+
} else if counter == 9 {
207+
numeral = [numeral, "IX".to_string()].join("");
208+
counter -= 9;
209+
} else if counter >= 1000 {
210+
numeral = [numeral, "M".to_string()].join("");
211+
counter -= 1000;
212+
} else if counter >= 900 {
213+
numeral = [numeral, "CM".to_string()].join("");
214+
counter -= 900;
215+
} else if counter >= 500 {
216+
numeral = [numeral, "D".to_string()].join("");
217+
counter -= 500;
218+
} else if counter >= 400 {
219+
numeral = [numeral, "CD".to_string()].join("");
220+
counter -= 400;
221+
} else if counter >= 100 {
222+
numeral = [numeral, "C".to_string()].join("");
223+
counter -= 100;
224+
} else if counter >= 90 {
225+
numeral = [numeral, "XC".to_string()].join("");
226+
counter -= 90;
227+
} else if counter >= 50 {
228+
numeral = [numeral, "L".to_string()].join("");
229+
counter -= 50;
230+
} else if counter >= 10 {
231+
numeral = [numeral, "X".to_string()].join("");
232+
counter -= 10;
233+
} else if counter >= 5 {
234+
numeral = [numeral, "V".to_string()].join("");
235+
counter -= 5;
236+
}
237+
}
238+
return numeral;
239+
}

roman-numerals/src/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
fn main() {
2+
println!("Hello, world!");
3+
}

0 commit comments

Comments
 (0)