Hey, I'm trying to do some vector based code, and my unittests started
to fail on testing normalize. I'm using the standard algorithm, but
the assert is always return false. I did some investigation, and can
show that this program causes failure:
import std.math : sqrt;
import std.stdio : writeln;
T size(T)(T[] t){
T val = 0;
for(size_t i = 0; i < t.length; i++) {
val += t[i]*t[i];
}
return sqrt(val);
}
void normalize(T)(ref T[] t) {
auto s = size(t);
foreach(ref v; t) {
v /= s;
}
}
void main() {
float[] vector = [1,2,3,4];
normalize(vector);
auto v1 = size!float(vector);
writeln(v1 == 1); //false
writeln(v1 == 1.0); //false
writeln(v1 == 1.0f); //false
writeln(v1+1 == 2.0f); //true
}
I used typeid and can show that the type of `v1` is `float`, as you'd
expect. And the last one passes fine, as does doing `(v1+1)-1 == 1`.
I'm not sure what could be causing this. I believe it may be a bug,
but I would like to see if I'm just wrong instead.
--
James Miller