From 593565c48967a42185f6255f2a14e70eef7f2f06 Mon Sep 17 00:00:00 2001 From: sgoudham Date: Sat, 15 Jan 2022 20:09:24 +0000 Subject: [PATCH] Add bubble sort --- sorting/Cargo.toml | 9 ++++++++ sorting/src/lib.rs | 35 ++++++++++++++++++++++++++++++ sorting/tests/integration_tests.rs | 18 +++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 sorting/Cargo.toml create mode 100644 sorting/src/lib.rs create mode 100644 sorting/tests/integration_tests.rs diff --git a/sorting/Cargo.toml b/sorting/Cargo.toml new file mode 100644 index 0000000..ad267b1 --- /dev/null +++ b/sorting/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "sorting" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rand = "0.8.4" \ No newline at end of file diff --git a/sorting/src/lib.rs b/sorting/src/lib.rs new file mode 100644 index 0000000..654d2cc --- /dev/null +++ b/sorting/src/lib.rs @@ -0,0 +1,35 @@ +pub mod bubble_sort { + pub fn sort(vec: &mut Vec) { + for outer in (0..vec.len()).rev() { + for inner in 0..outer { + if vec[inner] > vec[inner + 1] { + super::swap(vec, inner, inner + 1); + } + } + } + } +} + +fn swap(vec: &mut Vec, index_one: usize, index_two: usize) { + let temp = vec[index_two]; + vec[index_two] = vec[index_one]; + vec[index_one] = temp; +} + +#[cfg(test)] +mod lib_tests { + use super::*; + + #[test] + fn can_swap_numbers() { + // Arrange + let mut vec = vec![1, 2]; + + // Act + swap(&mut vec, 0, 1); + + // Assert + assert_eq!(vec[0], 2); + assert_eq!(vec[1], 1); + } +} \ No newline at end of file diff --git a/sorting/tests/integration_tests.rs b/sorting/tests/integration_tests.rs new file mode 100644 index 0000000..0bc3e39 --- /dev/null +++ b/sorting/tests/integration_tests.rs @@ -0,0 +1,18 @@ +use rand::seq::SliceRandom; +use sorting; +use rand::thread_rng; + +#[test] +fn bubble_sort_ascending() { + // Arrange + let mut vec: Vec = (0..20).rev().collect(); + vec.shuffle(&mut thread_rng()); + + // Act + sorting::bubble_sort::sort(&mut vec); + + // Assert + for i in 0..20 { + assert_eq!(vec[i], i); + } +} \ No newline at end of file