I have written simple code to overload + operator in v, and unit test for validate if code is working.
// vector.v
module vector
pub struct Vector {
values []int
}
pub fn (v Vector) at(index int) int {
return v.values[index]
}
fn (v1 Vector) + (v2 Vector) !Vector {
if v1.values.len != v2.values.len {
return error('Vectors must be of the same length')
}
mut result := []int{len: v1.values.len}
for i in 0 .. v1.values.len {
result[i] = v1.values[i] + v2.values[i]
}
return Vector{
values: result
}
}
// vector_test.v
module vector
fn test_matrix_add() {
v1 := Vector{
values: [1, 2, 3]
}
v2 := Vector{
values: [4, 5, 6]
}
result := Vector{
values: [5, 7, 9]
}
assert v1 + v2 == result
}
when I am running v test ., I am getting this error.
src/vector/vector_test.v:15:9: error: unwrapped Result cannot be used in an infix expression
13 | }
14 |
15 | assert v1 + v2 == result
| ~~~~~~~
16 | }
Now after looking at documentation, I was trying to unwrap v1 + v2 result since it can also return an error, like this assert (v1 + v2 or {}) == result but it was giving me error like this error: cannot use or {} block on non-option variable.
Finally, I tried some workaround like below,
result := v1 + v2
expected := Vector{
values: [5, 7, 9]
}
assert result == expected
This time I didn't got any error from v but got builder error in c.
error: cannot convert 'struct _result_src__vector__Vector' to 'struct src__vector__Vector'
builder error:
==================
C error. This should never happen.
This is a compiler bug, please report it using `v bug file.v`.