v2 / vlib / v / tests / generics / generic_selector_indexexpr_test.v
44 lines · 37 sloc · 713 bytes · 052e5af8f3f4b742d5afa3e59125134572d73193
Raw
1module main
2
3pub struct Vector[T] {
4 n int
5 values []T
6}
7
8pub fn Vector.new[T](v []T) Vector[T] {
9 return Vector[T]{
10 n: v.len
11 values: v
12 }
13}
14
15pub fn (v Vector[T]) str() string {
16 return v.values.str()
17}
18
19pub fn (v Vector[T]) + (u Vector[T]) Vector[T] {
20 assert v.n == u.n
21 return Vector[T]{
22 n: v.n
23 values: []T{len: v.n, init: T(v.values[index] + u.values[index])}
24 }
25}
26
27pub fn (v Vector[T]) dot(u Vector[T]) T {
28 assert v.n == u.n
29 mut sum := T(0)
30 for i in 0 .. v.n {
31 sum += v.values[i] * u.values[i]
32 }
33 return sum
34}
35
36fn test_main() {
37 v := Vector.new[f64]([1.0, 2, 3])
38 vdotv := v.dot(v)
39 assert vdotv == 14.0
40
41 u := Vector.new[int]([1, 2, 3])
42 udotu := u.dot(u)
43 assert udotu == 14
44}
45