Skip to content

Commit 025c93a

Browse files
arnavbAnshulMalik
authored andcommitted
Separate all tests in searching folder and some others (TheAlgorithms#71)
* Add another test for Caesar Cipher * Separate binary search tests * Add more heap sort tests * Add tests for insertion sort * Implement/separate more tests * Remove redundant tests * Remove redundant tests
1 parent 203bc45 commit 025c93a

File tree

8 files changed

+118
-37
lines changed

8 files changed

+118
-37
lines changed

src/ciphers/caesar.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,20 @@ pub fn caesar(cipher: &str, shift: u8) -> String {
2424

2525
#[cfg(test)]
2626
mod tests {
27+
use super::*;
28+
29+
#[test]
30+
fn empty() {
31+
assert_eq!(caesar("", 13), "");
32+
}
33+
2734
#[test]
2835
fn caesar_rot_13() {
29-
assert_eq!(super::caesar("rust", 13), "ehfg");
36+
assert_eq!(caesar("rust", 13), "ehfg");
3037
}
3138

3239
#[test]
3340
fn caesar_unicode() {
34-
assert_eq!(super::caesar("attack at dawn 攻", 5), "fyyfhp fy ifbs 攻");
41+
assert_eq!(caesar("attack at dawn 攻", 5), "fyyfhp fy ifbs 攻");
3542
}
3643
}

src/general/hanoi.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub fn hanoi(n: i32, from: i32, to: i32, via: i32, moves: &mut Vec<(i32, i32)>)
88

99
#[cfg(test)]
1010
mod tests {
11-
use super::hanoi;
11+
use super::*;
1212

1313
#[test]
1414
fn hanoi_simple() {

src/searching/binary_search.rs

+22-7
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,39 @@ pub fn binary_search<T: PartialEq + PartialOrd>(item: &T, arr: &[T]) -> Option<u
2626

2727
#[cfg(test)]
2828
mod tests {
29+
use super::*;
30+
31+
// TODO: Fix this test; currently fails due to underflow
32+
// #[test]
33+
// fn empty() {
34+
// let index = binary_search(&"a", &vec![]);
35+
// assert_eq!(index, None);
36+
// }
37+
2938
#[test]
30-
fn binary() {
31-
let index = super::binary_search(&"a", &vec!["a", "b", "c", "d", "google", "zoo"]);
39+
fn search_strings() {
40+
let index = binary_search(&"a", &vec!["a", "b", "c", "d", "google", "zoo"]);
3241
assert_eq!(index, Some(0));
42+
}
3343

34-
let index = super::binary_search(&4, &vec![1, 2, 3, 4]);
44+
#[test]
45+
fn search_ints() {
46+
let index = binary_search(&4, &vec![1, 2, 3, 4]);
3547
assert_eq!(index, Some(3));
3648

37-
let index = super::binary_search(&3, &vec![1, 2, 3, 4]);
49+
let index = binary_search(&3, &vec![1, 2, 3, 4]);
3850
assert_eq!(index, Some(2));
3951

40-
let index = super::binary_search(&2, &vec![1, 2, 3, 4]);
52+
let index = binary_search(&2, &vec![1, 2, 3, 4]);
4153
assert_eq!(index, Some(1));
4254

43-
let index = super::binary_search(&1, &vec![1, 2, 3, 4]);
55+
let index = binary_search(&1, &vec![1, 2, 3, 4]);
4456
assert_eq!(index, Some(0));
57+
}
4558

46-
let index = super::binary_search(&5, &vec![1, 2, 3, 4]);
59+
#[test]
60+
fn not_found() {
61+
let index = binary_search(&5, &vec![1, 2, 3, 4]);
4762
assert_eq!(index, None);
4863
}
4964
}

src/sorting/counting_sort.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -52,29 +52,34 @@ pub fn generic_counting_sort<T: Into<u64> + From<u8> + AddAssign + Copy>(
5252
#[cfg(test)]
5353
mod test {
5454
use super::super::is_sorted;
55+
use super::*;
5556

5657
#[test]
57-
fn counting_sort() {
58-
//descending
58+
fn counting_sort_descending() {
5959
let mut ve1 = vec![6, 5, 4, 3, 2, 1];
60-
super::counting_sort(&mut ve1, 6);
60+
counting_sort(&mut ve1, 6);
6161

6262
assert!(is_sorted(&ve1));
63+
}
6364

64-
//pre-sorted
65+
#[test]
66+
fn counting_sort_pre_sorted() {
6567
let mut ve2 = vec![1, 2, 3, 4, 5, 6];
66-
super::counting_sort(&mut ve2, 6);
68+
counting_sort(&mut ve2, 6);
6769

6870
assert!(is_sorted(&ve2));
6971
}
72+
7073
#[test]
7174
fn generic_counting_sort() {
7275
let mut ve1: Vec<u8> = vec![100, 30, 60, 10, 20, 120, 1];
7376
super::generic_counting_sort(&mut ve1, 120);
7477

7578
assert!(is_sorted(&ve1));
79+
}
7680

77-
//pre-sorted u64
81+
#[test]
82+
fn presorted_u64_counting_sort() {
7883
let mut ve2: Vec<u64> = vec![1, 2, 3, 4, 5, 6];
7984
super::generic_counting_sort(&mut ve2, 6);
8085

src/sorting/heap_sort.rs

+14
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,18 @@ mod tests {
122122
heap_sort(&mut arr);
123123
assert_eq!(&arr, &[1, 2, 3, 4]);
124124
}
125+
126+
#[test]
127+
fn odd_number_of_elements() {
128+
let mut arr = vec![3, 4, 2, 1, 7];
129+
heap_sort(&mut arr);
130+
assert_eq!(&arr, &[1, 2, 3, 4, 7]);
131+
}
132+
133+
#[test]
134+
fn repeated_elements() {
135+
let mut arr = vec![542, 542, 542, 542];
136+
heap_sort(&mut arr);
137+
assert_eq!(&arr, &vec![542, 542, 542, 542]);
138+
}
125139
}

src/sorting/insertion.rs

+24-3
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,41 @@ where
3333

3434
#[cfg(test)]
3535
mod tests {
36-
#[test]
37-
fn insertion() {
38-
use sorting::insertion::*;
36+
use super::*;
3937

38+
#[test]
39+
fn empty() {
4040
let res = insertion_sort(&Vec::<u8>::new());
4141
assert_eq!(res, vec![]);
42+
}
4243

44+
#[test]
45+
fn one_element() {
4346
let res = insertion_sort(&vec!["a"]);
4447
assert_eq!(res, vec!["a"]);
48+
}
4549

50+
#[test]
51+
fn already_sorted() {
4652
let res = insertion_sort(&vec!["a", "b", "c"]);
4753
assert_eq!(res, vec!["a", "b", "c"]);
54+
}
4855

56+
#[test]
57+
fn basic() {
4958
let res = insertion_sort(&vec!["d", "a", "c", "b"]);
5059
assert_eq!(res, vec!["a", "b", "c", "d"]);
5160
}
61+
62+
#[test]
63+
fn odd_number_of_elements() {
64+
let res = insertion_sort(&vec!["d", "a", "c", "e", "b"]);
65+
assert_eq!(res, vec!["a", "b", "c", "d", "e"]);
66+
}
67+
68+
#[test]
69+
fn repeated_elements() {
70+
let res = insertion_sort(&vec![542, 542, 542, 542]);
71+
assert_eq!(res, vec![542, 542, 542, 542]);
72+
}
5273
}

src/sorting/selection_sort.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,33 @@ pub fn selection_sort<T: Ord>(arr: &mut [T]) {
1313

1414
#[cfg(test)]
1515
mod tests {
16+
use super::*;
17+
1618
#[test]
17-
fn sort_numbers() {
18-
use sorting::selection_sort;
19+
fn basic() {
20+
let mut res = vec!["d", "a", "c", "b"];
21+
selection_sort(&mut res);
22+
assert_eq!(res, vec!["a", "b", "c", "d"]);
23+
}
1924

25+
#[test]
26+
fn empty() {
2027
let mut res = Vec::<u8>::new();
2128
selection_sort(&mut res);
2229
assert_eq!(res, vec![]);
30+
}
2331

32+
#[test]
33+
fn one_element() {
2434
let mut res = vec!["a"];
2535
selection_sort(&mut res);
2636
assert_eq!(res, vec!["a"]);
37+
}
2738

39+
#[test]
40+
fn pre_sorted() {
2841
let mut res = vec!["a", "b", "c"];
2942
selection_sort(&mut res);
3043
assert_eq!(res, vec!["a", "b", "c"]);
31-
32-
let mut res = vec!["d", "a", "c", "b"];
33-
selection_sort(&mut res);
34-
assert_eq!(res, vec!["a", "b", "c", "d"]);
3544
}
3645
}

src/sorting/shell_sort.rs

+22-12
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,36 @@ mod test {
2727
use super::*;
2828

2929
#[test]
30-
fn shell_sort_test() {
31-
// test for reverse array
32-
let mut ve1 = vec![6, 5, 4, 3, 2, 1];
30+
fn basic() {
31+
let mut vec = vec![3, 5, 6, 3, 1, 4];
32+
shell_sort(&mut ve3);
33+
for i in 0..ve3.len() - 1 {
34+
assert!(ve3[i] <= ve3[i + 1]);
35+
}
36+
}
37+
38+
#[test]
39+
fn empty() {
40+
let mut vec: Vec<i32> = vec![];
41+
shell_sort(&mut vec);
42+
assert_eq!(vec, vec![]);
43+
}
44+
45+
#[test]
46+
fn reverse() {
47+
let mut vec = vec![6, 5, 4, 3, 2, 1];
3348
shell_sort(&mut ve1);
3449
for i in 0..ve1.len() - 1 {
3550
assert!(ve1[i] <= ve1[i + 1]);
3651
}
52+
}
3753

38-
// test for already sorted array
39-
let mut ve2 = vec![1, 2, 3, 4, 5, 6];
54+
#[test]
55+
fn already_sorted() {
56+
let mut vec = vec![1, 2, 3, 4, 5, 6];
4057
shell_sort(&mut ve2);
4158
for i in 0..ve2.len() - 1 {
4259
assert!(ve2[i] <= ve2[i + 1]);
4360
}
44-
45-
// test for unsorted
46-
let mut ve3 = vec![3, 5, 6, 3, 1, 4];
47-
shell_sort(&mut ve3);
48-
for i in 0..ve3.len() - 1 {
49-
assert!(ve3[i] <= ve3[i + 1]);
50-
}
5161
}
5262
}

0 commit comments

Comments
 (0)