From bcd2e394f7d803070388eb5b755e8e96f5f2946b Mon Sep 17 00:00:00 2001 From: Maxime CASEAUX Date: Thu, 30 Nov 2023 15:53:49 +0100 Subject: [PATCH 1/3] added some test to sorting algorithm --- src/sorting/src/tests/bubble_sort_test.cairo | 24 +++++++++++++- src/sorting/src/tests/merge_sort_test.cairo | 33 ++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/sorting/src/tests/bubble_sort_test.cairo b/src/sorting/src/tests/bubble_sort_test.cairo index 5026a9a9..c6bbf8a3 100644 --- a/src/sorting/src/tests/bubble_sort_test.cairo +++ b/src/sorting/src/tests/bubble_sort_test.cairo @@ -47,7 +47,18 @@ fn bubblesort_test_pre_sorted() { #[test] #[available_gas(2000000)] -fn bubblesort_test_2_same_values() { +fn bubblesort_test_pre_sorted_decreasing() { + let mut data = array![4_u32, 3_u32, 2_u32, 1_u32]; + let mut correct = array![1_u32, 2_u32, 3_u32, 4_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_pre_sorted_2_same_values() { let mut data = array![1_u32, 2_u32, 2_u32, 4_u32]; let mut correct = array![1_u32, 2_u32, 2_u32, 4_u32]; @@ -55,3 +66,14 @@ fn bubblesort_test_2_same_values() { assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_2_same_values() { + let mut data = array![1_u32, 2_u32, 4_u32, 2_u32]; + let mut correct = array![1_u32, 2_u32, 2_u32, 4_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} diff --git a/src/sorting/src/tests/merge_sort_test.cairo b/src/sorting/src/tests/merge_sort_test.cairo index 9cc337bc..d5a6fb8b 100644 --- a/src/sorting/src/tests/merge_sort_test.cairo +++ b/src/sorting/src/tests/merge_sort_test.cairo @@ -11,6 +11,17 @@ fn mergesort_test() { assert(is_equal(sorted, correct), 'invalid result'); } +#[test] +#[available_gas(2000000)] +fn mergesort_test_2_pre_sorted_decreasing() { + let mut data = array![4_u32, 3_u32, 2_u32, 1_u32]; + let mut correct = array![1_u32, 2_u32, 3_u32, 4_u32]; + + let sorted = merge(data); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + #[test] #[available_gas(2000000)] fn mergesort_test_empty() { @@ -44,3 +55,25 @@ fn mergesort_test_pre_sorted() { assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } + +#[test] +#[available_gas(2000000)] +fn mergesort_test_2_same_values() { + let mut data = array![1_u32, 2_u32, 3_u32, 2_u32, 4_u32]; + let mut correct = array![1_u32, 2_u32, 2_u32, 3_u32, 4_u32]; + + let sorted = merge(data); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn mergesort_test_2_same_values_pre_sorted() { + let mut data = array![1_u32, 2_u32, 2_u32, 3_u32, 4_u32]; + let mut correct = array![1_u32, 2_u32, 2_u32, 3_u32, 4_u32]; + + let sorted = merge(data); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} From 55b3a98975ebeeea14f9a35f10735a0d5f274054 Mon Sep 17 00:00:00 2001 From: Maxime CASEAUX Date: Thu, 30 Nov 2023 16:49:07 +0100 Subject: [PATCH 2/3] added option to bubble sort in decreasing order and relative test --- src/sorting/src/bubble_sort.cairo | 6 +- src/sorting/src/tests/bubble_sort_test.cairo | 92 ++++++++++++++++++-- 2 files changed, 89 insertions(+), 9 deletions(-) diff --git a/src/sorting/src/bubble_sort.cairo b/src/sorting/src/bubble_sort.cairo index 470f580a..1a03a995 100644 --- a/src/sorting/src/bubble_sort.cairo +++ b/src/sorting/src/bubble_sort.cairo @@ -5,7 +5,9 @@ /// * `array` - Array to sort /// # Returns /// * `Array` - Sorted array -fn bubble_sort_elements, +Drop, +PartialOrd>(mut array: Array) -> Array { +fn bubble_sort_elements, +Drop, +PartialOrd, +PartialEq>( + mut array: Array, asc: bool +) -> Array { if array.len() <= 1 { return array; } @@ -26,7 +28,7 @@ fn bubble_sort_elements, +Drop, +PartialOrd>(mut array: Array< idx2 = 1; sorted_iteration = 0; } else { - if *array[idx1] <= *array[idx2] { + if (*array[idx1] == *array[idx2]) || !((asc) ^ (*array[idx1] < *array[idx2])) { sorted_array.append(*array[idx1]); idx1 = idx2; idx2 += 1; diff --git a/src/sorting/src/tests/bubble_sort_test.cairo b/src/sorting/src/tests/bubble_sort_test.cairo index c6bbf8a3..a52c3003 100644 --- a/src/sorting/src/tests/bubble_sort_test.cairo +++ b/src/sorting/src/tests/bubble_sort_test.cairo @@ -6,7 +6,7 @@ fn bubblesort_test() { let mut data = array![4_u32, 2_u32, 1_u32, 3_u32, 5_u32, 0_u32]; let mut correct = array![0_u32, 1_u32, 2_u32, 3_u32, 4_u32, 5_u32]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } @@ -18,7 +18,7 @@ fn bubblesort_test_empty() { let mut data = array![]; let mut correct = array![]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } @@ -29,7 +29,7 @@ fn bubblesort_test_one_element() { let mut data = array![2_u32]; let mut correct = array![2_u32]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } @@ -40,7 +40,7 @@ fn bubblesort_test_pre_sorted() { let mut data = array![1_u32, 2_u32, 3_u32, 4_u32]; let mut correct = array![1_u32, 2_u32, 3_u32, 4_u32]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } @@ -51,7 +51,7 @@ fn bubblesort_test_pre_sorted_decreasing() { let mut data = array![4_u32, 3_u32, 2_u32, 1_u32]; let mut correct = array![1_u32, 2_u32, 3_u32, 4_u32]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } @@ -62,7 +62,7 @@ fn bubblesort_test_pre_sorted_2_same_values() { let mut data = array![1_u32, 2_u32, 2_u32, 4_u32]; let mut correct = array![1_u32, 2_u32, 2_u32, 4_u32]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } @@ -73,7 +73,85 @@ fn bubblesort_test_2_same_values() { let mut data = array![1_u32, 2_u32, 4_u32, 2_u32]; let mut correct = array![1_u32, 2_u32, 2_u32, 4_u32]; - let sorted = bubble_sort::bubble_sort_elements(data); + let sorted = bubble_sort::bubble_sort_elements(data, true); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(20000000000000)] +fn bubblesort_test_dsc() { + let mut data = array![4_u32, 2_u32, 1_u32, 3_u32, 5_u32, 0_u32]; + let mut correct = array![5_u32, 4_u32, 3_u32, 2_u32, 1_u32, 0_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_empty_dsc() { + let mut data = array![]; + let mut correct = array![]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_one_element_dsc() { + let mut data = array![2_u32]; + let mut correct = array![2_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_pre_sorted_dsc() { + let mut data = array![1_u32, 2_u32, 3_u32, 4_u32]; + let mut correct = array![4_u32, 3_u32, 2_u32, 1_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_pre_sorted_decreasing_dsc() { + let mut data = array![4_u32, 3_u32, 2_u32, 1_u32]; + let mut correct = array![4_u32, 3_u32, 2_u32, 1_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_pre_sorted_2_same_values_dsc() { + let mut data = array![1_u32, 2_u32, 2_u32, 4_u32]; + let mut correct = array![4_u32, 2_u32, 2_u32, 1_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); + + assert(is_equal(sorted.span(), correct.span()), 'invalid result'); +} + +#[test] +#[available_gas(2000000)] +fn bubblesort_test_2_same_values_dsc() { + let mut data = array![1_u32, 2_u32, 4_u32, 2_u32]; + let mut correct = array![4_u32, 2_u32, 2_u32, 1_u32]; + + let sorted = bubble_sort::bubble_sort_elements(data, false); assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } From 6dc82e40f46794dc9d12fe3d5652b69b7c7918d9 Mon Sep 17 00:00:00 2001 From: azurwastaken Date: Mon, 4 Dec 2023 15:57:53 +0100 Subject: [PATCH 3/3] Update bubble_sort_test.cairo --- src/sorting/src/tests/bubble_sort_test.cairo | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/sorting/src/tests/bubble_sort_test.cairo b/src/sorting/src/tests/bubble_sort_test.cairo index 704a49b9..a52c3003 100644 --- a/src/sorting/src/tests/bubble_sort_test.cairo +++ b/src/sorting/src/tests/bubble_sort_test.cairo @@ -155,14 +155,3 @@ fn bubblesort_test_2_same_values_dsc() { assert(is_equal(sorted.span(), correct.span()), 'invalid result'); } - -#[test] -#[available_gas(2000000)] -fn bubblesort_test_2_same_values() { - let mut data = array![1_u32, 2_u32, 4_u32, 2_u32]; - let mut correct = array![1_u32, 2_u32, 2_u32, 4_u32]; - - let sorted = bubble_sort::bubble_sort_elements(data); - - assert(is_equal(sorted.span(), correct.span()), 'invalid result'); -}