From 7f4545b241e9b8d9ff6a422cbf05df9d95683546 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg <ryan@guzba.com> Date: Sat, 5 Jun 2021 00:12:14 -0500 Subject: [PATCH 1/2] faster == and != --- src/vmath.nim | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/vmath.nim b/src/vmath.nim index bfe3b41..8783f0f 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -509,6 +509,24 @@ proc zzx*[T](a: GVec34[T]): GVec3[T] = gvec3[T](a.z, a.z, a.x) proc zzy*[T](a: GVec34[T]): GVec3[T] = gvec3[T](a.z, a.z, a.y) proc zzz*[T](a: GVec34[T]): GVec3[T] = gvec3[T](a.z, a.z, a.z) +proc `==`*[T](a, b: GVec2[T]): bool = + a.x == b.x and a.y == b.y + +proc `==`*[T](a, b: GVec3[T]): bool = + a.x == b.x and a.y == b.y and a.z == b.z + +proc `==`*[T](a, b: GVec4[T]): bool = + a.x == b.x and a.y == b.y and a.z == b.z and a.w == b.w + +proc `!=`*[T](a, b: GVec2[T]): bool = + a.x != b.x or a.y != b.y + +proc `!=`*[T](a, b: GVec3[T]): bool = + a.x != b.x or a.y != b.y or a.z != b.z + +proc `!=`*[T](a, b: GVec4[T]): bool = + a.x != b.x or a.y != b.y or a.z != b.z or a.w != b.w + template genOp(op: untyped) = proc op*[T](a, b: GVec2[T]): GVec2[T] = gvec2[T]( From 6fcea77557b979347a5208e204f11deb4b877587 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg <ryan@guzba.com> Date: Sun, 6 Jun 2021 01:01:47 -0500 Subject: [PATCH 2/2] test --- tests/test.nim | 79 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/tests/test.nim b/tests/test.nim index c58afc1..6de9b50 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -86,23 +86,23 @@ block: ## Returns true if number is a NaN. f.classify notin {fcNormal, fcZero, fcSubnormal} - assert isNaNSlow(0.3) == false - assert isNaNSlow(0.0) == false - assert isNaNSlow(0.3/0.0) == true - assert isNaNSlow(-0.3/0.0) == true - assert isNaNSlow(5.0e-324) == false + doAssert isNaNSlow(0.3) == false + doAssert isNaNSlow(0.0) == false + doAssert isNaNSlow(0.3/0.0) == true + doAssert isNaNSlow(-0.3/0.0) == true + doAssert isNaNSlow(5.0e-324) == false - assert isNan(float32(0.3)) == false - assert isNan(float32(0.0)) == false - assert isNan(float32(0.3/0.0)) == true - assert isNan(float32(-0.3/0.0)) == true - assert isNan(float32(5.0e-324)) == false + doAssert isNan(float32(0.3)) == false + doAssert isNan(float32(0.0)) == false + doAssert isNan(float32(0.3/0.0)) == true + doAssert isNan(float32(-0.3/0.0)) == true + doAssert isNan(float32(5.0e-324)) == false - assert isNan(float64(0.3)) == false - assert isNan(float64(0.0)) == false - assert isNan(float64(0.3/0.0)) == true - assert isNan(float64(-0.3/0.0)) == true - assert isNan(float64(5.0e-324)) == false + doAssert isNan(float64(0.3)) == false + doAssert isNan(float64(0.0)) == false + doAssert isNan(float64(0.3/0.0)) == true + doAssert isNan(float64(-0.3/0.0)) == true + doAssert isNan(float64(5.0e-324)) == false block: when not defined(js): @@ -338,14 +338,14 @@ block: 0, 0, 0, 1 ) - assert $mat2( + doAssert $mat2( 1, 3, 0, 1 ) == """mat2( 1.0, 3.0, 0.0, 1.0 )""" - assert $mat3( + doAssert $mat3( 1, 3, 0, 0, 1, 0, 0, 3, 1 @@ -354,7 +354,7 @@ block: 0.0, 1.0, 0.0, 0.0, 3.0, 1.0 )""" - assert $mat4( + doAssert $mat4( 1, 3, 0, 0, 0, 1, 0, 0, 0, 3, 1, 0, @@ -365,14 +365,14 @@ block: 0.0, 3.0, 1.0, 0.0, 0.0, 3.0, 0.0, 1.0 )""" - assert $dmat2( + doAssert $dmat2( 1, 0, 4, 1 ) == """dmat2( 1.0, 0.0, 4.0, 1.0 )""" - assert $dmat3( + doAssert $dmat3( 1, 0, 0, 4, 1, 0, 4, 0, 1 @@ -381,7 +381,7 @@ block: 4.0, 1.0, 0.0, 4.0, 0.0, 1.0 )""" - assert $dmat4( + doAssert $dmat4( 1, 0, 0, 0, 4, 1, 0, 0, 4, 0, 1, 0, @@ -762,3 +762,40 @@ block: let mat3d = translate(vec3(10, 20, 0)) * rotateZ(45.toRadians) * scale(vec3(2)) echo "test finished successfully" + +block: + doAssert vec2(1, 1) == vec2(1, 1) + doAssert dvec2(2, 2) == dvec2(2, 2) + doAssert bvec2(true, true) == bvec2(true, true) + doAssert ivec2(3, 3) == ivec2(3, 3) + doAssert uvec2(3, 3) == uvec2(3, 3) + + doAssert vec3(1, 1, 1) == vec3(1, 1, 1) + doAssert dvec3(2, 2, 2) == dvec3(2, 2, 2) + doAssert bvec3(true, true, true) == bvec3(true, true, true) + doAssert ivec3(3, 3, 3) == ivec3(3, 3, 3) + doAssert uvec3(3, 3, 3) == uvec3(3, 3, 3) + + doAssert vec4(1, 1, 1, 1) == vec4(1, 1, 1, 1) + doAssert dvec4(2, 2, 2, 2) == dvec4(2, 2, 2, 2) + doAssert bvec4(true, true, true, false) == bvec4(true, true, true, false) + doAssert ivec4(3, 3, 3, 3) == ivec4(3, 3, 3, 3) + doAssert uvec4(3, 3, 3, 3) == uvec4(3, 3, 3, 3) + + doAssert vec2(1, 1) != vec2(1, 2) + doAssert dvec2(2, 2) != dvec2(2, 3) + doAssert bvec2(true, true) != bvec2(true, false) + doAssert ivec2(3, 3) != ivec2(3, 4) + doAssert uvec2(3, 3) != uvec2(3, 4) + + doAssert vec3(1, 1, 1) != vec3(1, 1, 2) + doAssert dvec3(2, 2, 2) != dvec3(2, 2, 3) + doAssert bvec3(true, true, true) != bvec3(true, true, false) + doAssert ivec3(3, 3, 3) != ivec3(3, 3, 4) + doAssert uvec3(3, 3, 3) != uvec3(3, 3, 4) + + doAssert vec4(1, 1, 1, 1) != vec4(1, 1, 1, 2) + doAssert dvec4(2, 2, 2, 2) != dvec4(2, 2, 2, 3) + doAssert bvec4(true, true, true, false) != bvec4(true, true, true, true) + doAssert ivec4(3, 3, 3, 3) != ivec4(3, 3, 3, 4) + doAssert uvec4(3, 3, 3, 3) != uvec4(3, 3, 3, 4)