Prechádzať zdrojové kódy

Remove multiplication between 2 vector types (definition is ambiguous),
add some unittests for new operators

Steven Schveighoffer 3 rokov pred
rodič
commit
b497a9e98a
1 zmenil súbory, kde vykonal 8 pridanie a 2 odobranie
  1. 8 2
      source/raymathext.d

+ 8 - 2
source/raymathext.d

@@ -76,7 +76,7 @@ mixin template Linear()
             return mixin("T(" ~ fragment ~ ")");
         }
 
-        T opOpAssign(string op)(inout T rhs) if (["+", "-", "*", "/"].canFind(op))
+        ref T opOpAssign(string op)(inout T rhs) if (["+", "-"].canFind(op))
         {
             static foreach (field; [FieldNameTuple!T])
                 mixin(field ~ op ~ "= rhs." ~ field ~ ";");
@@ -96,7 +96,7 @@ mixin template Linear()
         return mixin("T(" ~ fragment ~ ")");
     }
 
-    T opOpAssign(string op)(inout float rhs) if (["+", "-", "*", "/"].canFind(op))
+    ref T opOpAssign(string op)(inout float rhs) if (["+", "-", "*", "/"].canFind(op))
     {
         static foreach (field; [FieldNameTuple!T])
             mixin(field ~ op ~ "= rhs;");
@@ -115,6 +115,12 @@ unittest
     Assert.equal(c, Vector3(4, 6, 18));
     Assert.equal(4.0f - Vector2.zero, Vector2(4, 4));
     Assert.equal(Vector2.one - 3.0f, Vector2(-2, -2));
+    a += 5;
+    Assert.equal(a, Vector3(6, 7, 14));
+    a *= 0.5;
+    Assert.equal(a, Vector3(3, 3.5, 7));
+    a += Vector3(3, 2.5, -1);
+    Assert.equal(a, Vector3(6, 6, 6));
 }
 
 import std.traits : FieldNameTuple;