Ver código fonte

Universal vector makro

Kajetan Johannes Hammerle 11 meses atrás
pai
commit
9b95fe764b
2 arquivos alterados com 23 adições e 29 exclusões
  1. 5 0
      include/core/Vector.h
  2. 18 29
      test/modules/BoxTests.c

+ 5 - 0
include/core/Vector.h

@@ -194,6 +194,11 @@ CORE_DEFINE_VECTOR_CONVERSION(CoreVector4, V4, CoreIntVector4, IV4);
 #define INT_VECTOR2 CORE_INT_VECTOR2
 #define INT_VECTOR3 CORE_INT_VECTOR3
 #define INT_VECTOR4 CORE_INT_VECTOR4
+
+#define SELECT_VECTOR(_1, _2, _3, _4, name, ...) name
+#define V(...)                                                                 \
+    ((SELECT_VECTOR(__VA_ARGS__, Vector4, Vector3, Vector2)){__VA_ARGS__})
+
 #endif
 
 #endif

+ 18 - 29
test/modules/BoxTests.c

@@ -2,32 +2,21 @@
 #include "core/Box.h"
 #include "core/ToString.h"
 
-#define CV3(a, b, c) (&(Vector3){{a, b, c}})
-
 static void testInit() {
     CoreBox box = BOX;
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
     char buffer[128];
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([0.000, 0.000, 0.000], [1.000, 2.000, 3.000])", buffer);
-    toStringV3(&box.min, buffer, sizeof(buffer));
-    TEST_STRING("[0.000, 0.000, 0.000]", buffer);
-    toStringV3(&box.max, buffer, sizeof(buffer));
-    TEST_STRING("[1.000, 2.000, 3.000]", buffer);
-
-    setBox(&box, CV3(-1.0f, -2.0f, -3.0f));
+    setBox(&box, &V(-1.0f, -2.0f, -3.0f));
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([-1.000, -2.000, -3.000], [0.000, 0.000, 0.000])", buffer);
-    toStringV3(&box.min, buffer, sizeof(buffer));
-    TEST_STRING("[-1.000, -2.000, -3.000]", buffer);
-    toStringV3(&box.max, buffer, sizeof(buffer));
-    TEST_STRING("[0.000, 0.000, 0.000]", buffer);
 }
 
 static void testOffset() {
     CoreBox box = BOX;
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
-    offsetBox(&box, CV3(7.0f, -4.0f, 6.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
+    offsetBox(&box, &V(7.0f, -4.0f, 6.0f));
     char buffer[128];
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([7.000, -4.000, 6.000], [8.000, -2.000, 9.000])", buffer);
@@ -35,12 +24,12 @@ static void testOffset() {
 
 static void testCollidesWith() {
     CoreBox boxA = BOX;
-    setBox(&boxA, CV3(1.0f, 2.0f, 3.0f));
+    setBox(&boxA, &V(1.0f, 2.0f, 3.0f));
     CoreBox boxB = BOX;
-    setBox(&boxB, CV3(-1.0f, -2.0f, -3.0f));
+    setBox(&boxB, &V(-1.0f, -2.0f, -3.0f));
     CoreBox boxC = BOX;
-    setBox(&boxC, CV3(2.0f, 2.0f, 2.0f));
-    offsetBox(&boxC, CV3(-1.0f, -1.0f, -1.0f));
+    setBox(&boxC, &V(2.0f, 2.0f, 2.0f));
+    offsetBox(&boxC, &V(-1.0f, -1.0f, -1.0f));
 
     TEST_TRUE(collidesWithBox(&boxC, &boxA));
     TEST_TRUE(collidesWithBox(&boxC, &boxB));
@@ -52,34 +41,34 @@ static void testCollidesWith() {
 
 static void testExpand() {
     CoreBox box = BOX;
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
-    expandBox(&box, CV3(7.0f, -4.0f, 6.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
+    expandBox(&box, &V(7.0f, -4.0f, 6.0f));
 
     char buffer[128];
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([0.000, -4.000, 0.000], [8.000, 2.000, 9.000])", buffer);
 
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
-    expandBox(&box, CV3(-7.0f, 4.0f, -6.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
+    expandBox(&box, &V(-7.0f, 4.0f, -6.0f));
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([-7.000, 0.000, -6.000], [1.000, 6.000, 3.000])", buffer);
 }
 
 static void testGrow() {
     CoreBox box = BOX;
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
-    growBox(&box, CV3(4.0f, 2.0f, 6.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
+    growBox(&box, &V(4.0f, 2.0f, 6.0f));
     char buffer[128];
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([-2.000, -1.000, -3.000], [3.000, 3.000, 6.000])", buffer);
 
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
-    growBox(&box, CV3(-4.0f, -2.0f, -6.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
+    growBox(&box, &V(-4.0f, -2.0f, -6.0f));
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([0.500, 1.000, 1.500], [0.500, 1.000, 1.500])", buffer);
 
-    setBox(&box, CV3(1.0f, 2.0f, 3.0f));
-    growBox(&box, CV3(-0.1f, -4.0f, -1.0f));
+    setBox(&box, &V(1.0f, 2.0f, 3.0f));
+    growBox(&box, &V(-0.1f, -4.0f, -1.0f));
     toString(&box, buffer, sizeof(buffer));
     TEST_STRING("Box([0.050, 1.000, 0.500], [0.950, 1.000, 2.500])", buffer);
 }