From a980b7847d072cf145c98b6786b201e43f9cef87 Mon Sep 17 00:00:00 2001 From: Rostislav Provodenko <“rostislav.provodenko@gmail.com”> Date: Tue, 17 Oct 2023 22:20:17 +0300 Subject: [PATCH 1/3] wip --- .gitignore | 1 + Cargo.lock | 7 +++++++ src/bubble_sort.rs | 8 ++++++++ src/lib.rs | 1 + tests/bubble_sort.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 63 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 src/bubble_sort.rs create mode 100644 src/lib.rs create mode 100644 tests/bubble_sort.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..51a8744 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "rust-algorithms" +version = "0.1.0" diff --git a/src/bubble_sort.rs b/src/bubble_sort.rs new file mode 100644 index 0000000..bc1dd27 --- /dev/null +++ b/src/bubble_sort.rs @@ -0,0 +1,8 @@ + +pub fn bubble_sort(vector: Vec) -> Vec { + + let mut index = 0; + let length = vector.len(); + + return vector; +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..6dabab2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod bubble_sort; diff --git a/tests/bubble_sort.rs b/tests/bubble_sort.rs new file mode 100644 index 0000000..61bf4e9 --- /dev/null +++ b/tests/bubble_sort.rs @@ -0,0 +1,46 @@ +// use rust_algorithms::bubble_sort; +use rust_algorithms::bubble_sort::bubble_sort; + +fn is_sorted(vector: &Vec) -> bool { + let mut previous: Option = None; + for el in vector.iter() { + match previous { + Some(x) => { + if x > *el {return false} + }, + _ => { + previous = Some(*el); + } + } + } + + true +} + +#[test] +fn it_works() { + let vector = Vec::new(); + bubble_sort(vector); +} + +#[test] +fn it_works_for_one_element() { + let mut vector: Vec = vec![1]; + vector = bubble_sort(vector); + assert_eq!(is_sorted(&vector), true); +} + +#[test] +fn it_works_for_two_elements_sorted() { + let mut vector: Vec = vec![1, 2]; + vector = bubble_sort(vector); + assert_eq!(is_sorted(&vector), true); +} + + +#[test] +fn it_works_for_two_elements_unsorted() { + let mut vector: Vec = vec![2, 1]; + vector = bubble_sort(vector); + assert_eq!(is_sorted(&vector), true); +} From 1024af2b6b5ccabeb6c88843485a3c4828efa617 Mon Sep 17 00:00:00 2001 From: Rostislav Provodenko <“rostislav.provodenko@gmail.com”> Date: Tue, 17 Oct 2023 22:36:08 +0300 Subject: [PATCH 2/3] wip --- Cargo.toml | 4 ++++ src/bubble_sort.rs | 19 +++++++++++++++---- tests/bubble_sort.rs | 23 +++++++++++++++++------ 3 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 Cargo.toml diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..48cd477 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "rust-algorithms" +version = "0.1.0" +edition = "2021" diff --git a/src/bubble_sort.rs b/src/bubble_sort.rs index bc1dd27..a5d1ccf 100644 --- a/src/bubble_sort.rs +++ b/src/bubble_sort.rs @@ -1,8 +1,19 @@ +pub fn bubble_sort(mut vector: Vec) -> Vec { + let mut outer_index = 0; + let length = vector.len(); -pub fn bubble_sort(vector: Vec) -> Vec { + while outer_index < length { + let mut inner_index = outer_index + 1; + while inner_index < length { + if vector[inner_index] < vector[inner_index - 1] { + let tmp = vector[inner_index]; + vector[inner_index] = vector[inner_index - 1]; + vector[inner_index - 1] = tmp; + } + inner_index += 1; + } + outer_index += 1; + } - let mut index = 0; - let length = vector.len(); - return vector; } diff --git a/tests/bubble_sort.rs b/tests/bubble_sort.rs index 61bf4e9..ab7e8ec 100644 --- a/tests/bubble_sort.rs +++ b/tests/bubble_sort.rs @@ -6,8 +6,10 @@ fn is_sorted(vector: &Vec) -> bool { for el in vector.iter() { match previous { Some(x) => { - if x > *el {return false} - }, + if x > *el { + return false; + } + } _ => { previous = Some(*el); } @@ -27,20 +29,29 @@ fn it_works() { fn it_works_for_one_element() { let mut vector: Vec = vec![1]; vector = bubble_sort(vector); - assert_eq!(is_sorted(&vector), true); + assert!(is_sorted(&vector)); } #[test] fn it_works_for_two_elements_sorted() { let mut vector: Vec = vec![1, 2]; vector = bubble_sort(vector); - assert_eq!(is_sorted(&vector), true); + assert!(is_sorted(&vector)); } - #[test] fn it_works_for_two_elements_unsorted() { let mut vector: Vec = vec![2, 1]; vector = bubble_sort(vector); - assert_eq!(is_sorted(&vector), true); + assert!(is_sorted(&vector)); +} + +#[test] +fn it_works_for_a_bigger_vector() { + let mut vector: Vec = vec![ + 213, 12, 123432, 11224, 6867, 32413, 78787653, 1213, 122, 4446, 146575, 1123245, 654654, + 1231, + ]; + vector = bubble_sort(vector); + assert!(is_sorted(&vector)); } From d7200b4c81bb781c9871a3d3526b65bd5769a76b Mon Sep 17 00:00:00 2001 From: Rostislav Provodenko <“rostislav.provodenko@gmail.com”> Date: Tue, 17 Oct 2023 22:42:35 +0300 Subject: [PATCH 3/3] workflow --- .github/workflows/check.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/check.yaml diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 0000000..7abd1bc --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,24 @@ +name: Check + +on: + push: + branches: + - main + pull_request: + branches: + - 'main' + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - uses: actions-rs/cargo@v1 + with: + command: build + - uses: actions-rs/cargo@v1 + with: + command: test