type Vector = []f64

@[heap]
struct HeapArray {
mut:
	data []f64
}

fn new_vector(x f64, y f64, z f64, w f64) &Vector {
	a := HeapArray{
		data: [x, y, z, w]
	}
	return &Vector(&a.data)
}

pub fn (a &Vector) + (b &Vector) &Vector {
	mut res := HeapArray{
		data: []f64{len: a.len}
	}
	for i := 0; i < a.len; i++ {
		res.data[i] = (*a)[i] + (*b)[i]
	}
	return &Vector(&res.data)
}

fn test_alias_array_plus_overload() {
	mut a := new_vector(12, 4.5, 6.7, 6)
	b := new_vector(12, 4.5, 6.7, 6)
	dump(a)
	dump(b)
	c := a + b
	dump(c)
	assert *c == Vector([f64(24), 9, 13.4, 12])
	a = a + b
	assert a.str() == c.str()
	dump(a)
}
