diff --git a/vlib/v/tests/generics_with_recursive_generics_fn_test.v b/vlib/v/tests/generics_with_recursive_generics_fn_test.v new file mode 100644 index 0000000000..2e927e7934 --- /dev/null +++ b/vlib/v/tests/generics_with_recursive_generics_fn_test.v @@ -0,0 +1,43 @@ +import rand + +const ( + gen_len = 1000 // how many random numbers to generate + gen_max = 10000 // max of the generated numbers +) + +fn test_generics_with_recursive_generics_fn() { + mut arr := []int{} + for _ in 0 .. gen_len { + arr << rand.intn(gen_max) + } + println('before quick sort whether array is sorted: ${is_sorted(arr)}') + assert !is_sorted(arr) + quick_sort(mut arr, 0, arr.len - 1) + println('after quick sort whether array is sorted: ${is_sorted(arr)}') + assert is_sorted(arr) +} + +fn quick_sort(mut arr []T, l int, r int) { + if l >= r { + return + } + mut sep := l // what is sep: [...all_value=arr[sep]...] + for i in l + 1 .. r + 1 { + if arr[i] < arr[l] { + sep++ + arr[i], arr[sep] = arr[sep], arr[i] + } + } + arr[l], arr[sep] = arr[sep], arr[l] + quick_sort(mut arr, l, sep - 1) + quick_sort(mut arr, sep + 1, r) +} + +fn is_sorted(arr []T) bool { + for i in 0 .. arr.len - 1 { + if arr[i] > arr[i + 1] { + return false + } + } + return true +}