From fed355267187a0f7324634a1ef3aacc0d018d868 Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Wed, 29 Nov 2023 21:24:54 +0530 Subject: [PATCH] tests: add checker and passing test for generic receiver indexing (#20036) --- .../tests/generic_mut_struct_index_err.out | 7 +++++++ .../tests/generic_mut_struct_index_err.vv | 17 +++++++++++++++++ vlib/v/tests/generic_with_ptr_as_param_test.v | 15 +++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 vlib/v/checker/tests/generic_mut_struct_index_err.out create mode 100644 vlib/v/checker/tests/generic_mut_struct_index_err.vv create mode 100644 vlib/v/tests/generic_with_ptr_as_param_test.v diff --git a/vlib/v/checker/tests/generic_mut_struct_index_err.out b/vlib/v/checker/tests/generic_mut_struct_index_err.out new file mode 100644 index 00000000000000..8931c7ea0a4e2d --- /dev/null +++ b/vlib/v/checker/tests/generic_mut_struct_index_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/generic_mut_struct_index_err.vv:7:3: error: type `mut Heap` does not support slicing + 5 | + 6 | fn (mut h Heap[T]) insert(mut element T, pos int) { + 7 | h[pos] = element + | ~~~~~ + 8 | } + 9 | diff --git a/vlib/v/checker/tests/generic_mut_struct_index_err.vv b/vlib/v/checker/tests/generic_mut_struct_index_err.vv new file mode 100644 index 00000000000000..723700adf238ee --- /dev/null +++ b/vlib/v/checker/tests/generic_mut_struct_index_err.vv @@ -0,0 +1,17 @@ +pub struct Heap[T] { + mut: + arr []&T +} + +fn (mut h Heap[T]) insert(mut element T, pos int) { + h[pos] = element +} + +fn main() { + mut h := &Heap[int]{ + arr: []&int{cap: 10} + } + mut a := 3 + h.insert(mut &a, 0) + dump(h) +} diff --git a/vlib/v/tests/generic_with_ptr_as_param_test.v b/vlib/v/tests/generic_with_ptr_as_param_test.v new file mode 100644 index 00000000000000..212dc296632046 --- /dev/null +++ b/vlib/v/tests/generic_with_ptr_as_param_test.v @@ -0,0 +1,15 @@ +struct Number[T] { + value T +} + +fn f[T](numbers &Number[T], idx int) T { + return unsafe { numbers[idx].value } +} + +fn test_indexing_a_pointer_to_generic_instances() { + numbers := [10]Number[int]{init: Number[int]{ + value: index * 10 + }} + assert f(&numbers[0], 3) == 30 + assert f(&numbers[0], 9) == 90 +}