From fefbb5312e655c55c67cf66009434ec6a9c628d9 Mon Sep 17 00:00:00 2001 From: ayazhafiz Date: Tue, 11 Jan 2022 18:17:57 -0500 Subject: [PATCH] Yet more quicksort bugs --- compiler/test_gen/src/gen_list.rs | 114 +++--------------------------- 1 file changed, 11 insertions(+), 103 deletions(-) diff --git a/compiler/test_gen/src/gen_list.rs b/compiler/test_gen/src/gen_list.rs index 03d3bd0c15..55845c777e 100644 --- a/compiler/test_gen/src/gen_list.rs +++ b/compiler/test_gen/src/gen_list.rs @@ -1903,98 +1903,6 @@ fn gen_swap() { ); } -// #[test] -#[cfg(any(feature = "gen-llvm"))] -// fn gen_partition() { -// assert_evals_to!( -// indoc!( -// r#" -// swap : I64, I64, List a -> List a -// swap = \i, j, list -> -// when Pair (List.get list i) (List.get list j) is -// Pair (Ok atI) (Ok atJ) -> -// list -// |> List.set i atJ -// |> List.set j atI -// -// _ -> -// [] -// partition : I64, I64, List (Num a) -> [ Pair I64 (List (Num a)) ] -// partition = \low, high, initialList -> -// when List.get initialList high is -// Ok pivot -> -// when partitionHelp (low - 1) low initialList high pivot is -// Pair newI newList -> -// Pair (newI + 1) (swap (newI + 1) high newList) -// -// Err _ -> -// Pair (low - 1) initialList -// -// -// partitionHelp : I64, I64, List (Num a), I64, I64 -> [ Pair I64 (List (Num a)) ] -// partitionHelp = \i, j, list, high, pivot -> -// if j < high then -// when List.get list j is -// Ok value -> -// if value <= pivot then -// partitionHelp (i + 1) (j + 1) (swap (i + 1) j list) high pivot -// else -// partitionHelp i (j + 1) list high pivot -// -// Err _ -> -// Pair i list -// else -// Pair i list -// -// # when partition 0 0 [ 1,2,3,4,5 ] is -// # Pair list _ -> list -// [ 1,3 ] -// "# -// ), -// RocList::from_slice(&[2, 1]), -// RocList -// ); -// } - -// #[test] -#[cfg(any(feature = "gen-llvm"))] -// fn gen_partition() { -// assert_evals_to!( -// indoc!( -// r#" -// swap : I64, I64, List a -> List a -// swap = \i, j, list -> -// when Pair (List.get list i) (List.get list j) is -// Pair (Ok atI) (Ok atJ) -> -// list -// |> List.set i atJ -// |> List.set j atI -// -// _ -> -// [] -// partition : I64, I64, List (Num a) -> [ Pair I64 (List (Num a)) ] -// partition = \low, high, initialList -> -// when List.get initialList high is -// Ok pivot -> -// when partitionHelp (low - 1) low initialList high pivot is -// Pair newI newList -> -// Pair (newI + 1) (swap (newI + 1) high newList) -// -// Err _ -> -// Pair (low - 1) initialList -// -// -// partitionHelp : I64, I64, List (Num a), I64, I64 -> [ Pair I64 (List (Num a)) ] -// -// # when partition 0 0 [ 1,2,3,4,5 ] is -// # Pair list _ -> list -// [ 1,3 ] -// "# -// ), -// RocList::from_slice(&[2, 1]), -// RocList -// ); -// } #[test] #[cfg(any(feature = "gen-llvm"))] fn gen_quicksort() { @@ -2014,7 +1922,7 @@ fn gen_quicksort() { when partition low high list is Pair partitionIndex partitioned -> partitioned - |> quicksortHelp low (partitionIndex - 1) + |> quicksortHelp low (Num.subSaturated partitionIndex 1) |> quicksortHelp (partitionIndex + 1) high else list @@ -2035,12 +1943,12 @@ fn gen_quicksort() { partition = \low, high, initialList -> when List.get initialList high is Ok pivot -> - when partitionHelp (low - 1) low initialList high pivot is + when partitionHelp low low initialList high pivot is Pair newI newList -> - Pair (newI + 1) (swap (newI + 1) high newList) + Pair newI (swap newI high newList) Err _ -> - Pair (low - 1) initialList + Pair low initialList partitionHelp : Nat, Nat, List (Num a), Nat, (Num a) -> [ Pair Nat (List (Num a)) ] @@ -2049,7 +1957,7 @@ fn gen_quicksort() { when List.get list j is Ok value -> if value <= pivot then - partitionHelp (i + 1) (j + 1) (swap (i + 1) j list) high pivot + partitionHelp (i + 1) (j + 1) (swap i j list) high pivot else partitionHelp i (j + 1) list high pivot @@ -2111,7 +2019,7 @@ fn quicksort() { Pair newI (swap newI high newList) Err _ -> - Pair (low - 1) initialList + Pair low initialList partitionHelp : Nat, Nat, List (Num a), Nat, Num a -> [ Pair Nat (List (Num a)) ] @@ -2159,7 +2067,7 @@ fn quicksort_singleton() { when partition low high list is Pair partitionIndex partitioned -> partitioned - |> quicksortHelp low (partitionIndex - 1) + |> quicksortHelp low (Num.subSaturated partitionIndex 1) |> quicksortHelp (partitionIndex + 1) high else list @@ -2180,12 +2088,12 @@ fn quicksort_singleton() { partition = \low, high, initialList -> when List.get initialList high is Ok pivot -> - when partitionHelp (low - 1) low initialList high pivot is + when partitionHelp low low initialList high pivot is Pair newI newList -> - Pair (newI + 1) (swap (newI + 1) high newList) + Pair newI (swap newI high newList) Err _ -> - Pair (low - 1) initialList + Pair low initialList partitionHelp : Nat, Nat, List (Num a), Nat, Num a -> [ Pair Nat (List (Num a)) ] @@ -2194,7 +2102,7 @@ fn quicksort_singleton() { when List.get list j is Ok value -> if value <= pivot then - partitionHelp (i + 1) (j + 1) (swap (i + 1) j list) high pivot + partitionHelp (i + 1) (j + 1) (swap i j list) high pivot else partitionHelp i (j + 1) list high pivot