mirror of
https://github.com/HandmadeMath/HandmadeMath.git
synced 2026-01-02 17:52:27 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4981d5ab89 | ||
|
|
5f173e0176 | ||
|
|
575fcb767d | ||
|
|
a08262b2d9 | ||
|
|
53bc939d8e | ||
|
|
7eb4ae1846 | ||
|
|
48bd24b05e | ||
|
|
064baeb5b9 | ||
|
|
afd726ab0b |
@@ -1,3 +1,9 @@
|
|||||||
|
# Understanding the structure of Handmade Math
|
||||||
|
|
||||||
|
Most of the functions in Handmade Math are very short, and are the kind of functions you want to have inlined. Because of this, most functions in Handmade Math are defined with `HINLINE`, which is defined as `static inline`.
|
||||||
|
|
||||||
|
The exceptions are functions like `HMM_Rotate`, which are long enough that it doesn't make sense to inline them. These functions are defined with an `HEXTERN` prototype, and implemented in the `#ifdef HANDMADE_MATH_IMPLEMENTATION` block.
|
||||||
|
|
||||||
# Quick style guide
|
# Quick style guide
|
||||||
|
|
||||||
* Put braces on a new line
|
* Put braces on a new line
|
||||||
@@ -13,23 +19,6 @@
|
|||||||
1.f
|
1.f
|
||||||
.0f
|
.0f
|
||||||
```
|
```
|
||||||
* Put macros and return types on a separate line from the function definition:
|
|
||||||
```cpp
|
|
||||||
HINLINE float
|
|
||||||
HMM_MyFunction()
|
|
||||||
{
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
* Explicitly initialize variables to zero:
|
|
||||||
```cpp
|
|
||||||
HINLINE float
|
|
||||||
HMM_MyFunction()
|
|
||||||
{
|
|
||||||
float MyFloat = 0.0f;
|
|
||||||
hmm_vec3 MyVector = {0};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
* Put parentheses around the returned value:
|
* Put parentheses around the returned value:
|
||||||
```cpp
|
```cpp
|
||||||
HINLINE float
|
HINLINE float
|
||||||
@@ -40,7 +29,7 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Other notes
|
## Other style notes
|
||||||
|
|
||||||
* If a new function is defined with different names for different datatypes, also add C++ overloaded versions of the functions. For example, if you have `HMM_LengthVec2(hmm_vec2)` and `HMM_LengthVec3(hmm_vec3)`, also provide `HMM_Length(hmm_vec2)` and `HMM_Length(hmm_vec3)`.
|
* If a new function is defined with different names for different datatypes, also add C++ overloaded versions of the functions. For example, if you have `HMM_LengthVec2(hmm_vec2)` and `HMM_LengthVec3(hmm_vec3)`, also provide `HMM_Length(hmm_vec2)` and `HMM_Length(hmm_vec3)`.
|
||||||
|
|
||||||
@@ -49,3 +38,6 @@
|
|||||||
* Try to define functions in the same order as the prototypes.
|
* Try to define functions in the same order as the prototypes.
|
||||||
* Don't forget that Handmade Math uses column-major order for matrices!
|
* Don't forget that Handmade Math uses column-major order for matrices!
|
||||||
|
|
||||||
|
# Versioning
|
||||||
|
|
||||||
|
We use [semantic versioning](http://semver.org/) because it's reasonable.
|
||||||
|
|||||||
3814
HandmadeMath.h
3814
HandmadeMath.h
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
[](https://travis-ci.org/StrangeZak/Handmade-Math)
|
[](https://travis-ci.org/StrangeZak/Handmade-Math)
|
||||||
|
|
||||||
Single-file cross-platform public domain game math library for C/C++
|
A single-file, cross-platform, public domain game math library for C/C++.
|
||||||
|
|
||||||
|
To get started, go download [the latest release](https://github.com/HandmadeMath/Handmade-Math/releases).
|
||||||
|
|
||||||
_This library is free and will stay free, but if you would like to support development, or you are a company using HandmadeMath, please consider financial support._
|
_This library is free and will stay free, but if you would like to support development, or you are a company using HandmadeMath, please consider financial support._
|
||||||
|
|
||||||
@@ -12,6 +14,9 @@ _This library is free and will stay free, but if you would like to support devel
|
|||||||
|
|
||||||
Version | Changes |
|
Version | Changes |
|
||||||
----------------|----------------|
|
----------------|----------------|
|
||||||
|
**1.5.0** | Changed internal structure for better performance and inlining. As a result, `HANDMADE_MATH_NO_INLINE` has been removed and no longer has any effect.
|
||||||
|
**1.4.0** | Fixed bug when using C mode. SSE'd all vec4 operations. Removed zeroing for better performance.
|
||||||
|
**1.3.0** | Removed need to `#define HANDMADE_MATH_CPP_MODE`. C++ definitions are now included automatically in C++ environments.
|
||||||
**1.2.0** | Added equality functions for `HMM_Vec2`, `HMM_Vec3`, and `HMM_Vec4`, and SSE'd `HMM_MultiplyMat4` and `HMM_Transpose`.
|
**1.2.0** | Added equality functions for `HMM_Vec2`, `HMM_Vec3`, and `HMM_Vec4`, and SSE'd `HMM_MultiplyMat4` and `HMM_Transpose`.
|
||||||
**1.1.5** | Added `Width` and `Height` to `HMM_Vec2`, and made it so you can supply your own `SqrtF`.
|
**1.1.5** | Added `Width` and `Height` to `HMM_Vec2`, and made it so you can supply your own `SqrtF`.
|
||||||
**1.1.4** | Fixed SSE being included on platforms that don't support it, and fixed divide-by-zero errors when normalizing zero vectors.
|
**1.1.4** | Fixed SSE being included on platforms that don't support it, and fixed divide-by-zero errors when normalizing zero vectors.
|
||||||
@@ -43,4 +48,4 @@ This library is in the public domain. You can do whatever you want with it.
|
|||||||
|
|
||||||
**Where can I contact you to ask questions?**
|
**Where can I contact you to ask questions?**
|
||||||
|
|
||||||
You can email me at: Zak@Handmade.Network
|
Feel free to make Github issues for any questions, concerns, or problems you encounter.
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#define HANDMADE_MATH_IMPLEMENTATION
|
#define HANDMADE_MATH_IMPLEMENTATION
|
||||||
#define HANDMADE_MATH_NO_INLINE
|
#define HANDMADE_MATH_NO_INLINE
|
||||||
#include "../HandmadeMath.h"
|
#include "../HandmadeMath.h"
|
||||||
|
|||||||
@@ -25,27 +25,32 @@ int hmt_count_failures = 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define TEST_BEGIN(name) { \
|
#define TEST_BEGIN(name) { \
|
||||||
int count_testfailures = 0; \
|
int count_testcases = 0, count_testfailures = 0; \
|
||||||
count_categorytests++; \
|
count_categorytests++; \
|
||||||
printf(" " #name ":");
|
printf(" " #name ":");
|
||||||
#define TEST_END() \
|
#define TEST_END() \
|
||||||
count_categoryfailures += count_testfailures; \
|
count_categoryfailures += count_testfailures; \
|
||||||
if (count_testfailures > 0) { \
|
if (count_testfailures > 0) { \
|
||||||
count_categoryfailedtests++; \
|
count_categoryfailedtests++; \
|
||||||
|
printf("\n " RED "(%d/%d passed)" RESET, count_testcases - count_testfailures, count_testcases); \
|
||||||
printf("\n"); \
|
printf("\n"); \
|
||||||
} else { \
|
} else { \
|
||||||
printf(GREEN " [PASS]\n" RESET); \
|
printf(GREEN " [PASS] (%d/%d passed) \n" RESET, count_testcases - count_testfailures, count_testcases); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CASE_START() \
|
||||||
|
count_testcases++;
|
||||||
|
|
||||||
#define CASE_FAIL() \
|
#define CASE_FAIL() \
|
||||||
count_testfailures++; \
|
count_testfailures++; \
|
||||||
printf("\n - " RED "[FAIL] (%d) " RESET, __LINE__)
|
printf("\n - " RED "[FAIL] (%d) " RESET, __LINE__);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Asserts and expects
|
* Asserts and expects
|
||||||
*/
|
*/
|
||||||
#define EXPECT_TRUE(_actual) do { \
|
#define EXPECT_TRUE(_actual) do { \
|
||||||
|
CASE_START(); \
|
||||||
if (!(_actual)) { \
|
if (!(_actual)) { \
|
||||||
CASE_FAIL(); \
|
CASE_FAIL(); \
|
||||||
printf("Expected true but got something false"); \
|
printf("Expected true but got something false"); \
|
||||||
@@ -53,6 +58,7 @@ int hmt_count_failures = 0;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define EXPECT_FALSE(_actual) do { \
|
#define EXPECT_FALSE(_actual) do { \
|
||||||
|
CASE_START(); \
|
||||||
if (_actual) { \
|
if (_actual) { \
|
||||||
CASE_FAIL(); \
|
CASE_FAIL(); \
|
||||||
printf("Expected false but got something true"); \
|
printf("Expected false but got something true"); \
|
||||||
@@ -60,6 +66,7 @@ int hmt_count_failures = 0;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define EXPECT_FLOAT_EQ(_actual, _expected) do { \
|
#define EXPECT_FLOAT_EQ(_actual, _expected) do { \
|
||||||
|
CASE_START(); \
|
||||||
float actual = (_actual); \
|
float actual = (_actual); \
|
||||||
float diff = actual - (_expected); \
|
float diff = actual - (_expected); \
|
||||||
if (diff < -FLT_EPSILON || FLT_EPSILON < diff) { \
|
if (diff < -FLT_EPSILON || FLT_EPSILON < diff) { \
|
||||||
@@ -69,6 +76,7 @@ int hmt_count_failures = 0;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define EXPECT_NEAR(_actual, _expected, _epsilon) do { \
|
#define EXPECT_NEAR(_actual, _expected, _epsilon) do { \
|
||||||
|
CASE_START(); \
|
||||||
float actual = (_actual); \
|
float actual = (_actual); \
|
||||||
float diff = actual - (_expected); \
|
float diff = actual - (_expected); \
|
||||||
if (diff < -(_epsilon) || (_epsilon) < diff) { \
|
if (diff < -(_epsilon) || (_epsilon) < diff) { \
|
||||||
@@ -78,6 +86,7 @@ int hmt_count_failures = 0;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define EXPECT_LT(_actual, _expected) do { \
|
#define EXPECT_LT(_actual, _expected) do { \
|
||||||
|
CASE_START(); \
|
||||||
if ((_actual) >= (_expected)) { \
|
if ((_actual) >= (_expected)) { \
|
||||||
CASE_FAIL(); \
|
CASE_FAIL(); \
|
||||||
printf("Expected %f to be less than %f", (_actual), (_expected)); \
|
printf("Expected %f to be less than %f", (_actual), (_expected)); \
|
||||||
@@ -85,6 +94,7 @@ int hmt_count_failures = 0;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define EXPECT_GT(_actual, _expected) do { \
|
#define EXPECT_GT(_actual, _expected) do { \
|
||||||
|
CASE_START(); \
|
||||||
if ((_actual) <= (_expected)) { \
|
if ((_actual) <= (_expected)) { \
|
||||||
CASE_FAIL(); \
|
CASE_FAIL(); \
|
||||||
printf("Expected %f to be greater than %f", (_actual), (_expected)); \
|
printf("Expected %f to be greater than %f", (_actual), (_expected)); \
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(HMM_LengthSquaredVec3(v3), 14.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthSquaredVec3(v3), 14.0f);
|
||||||
EXPECT_FLOAT_EQ(HMM_LengthSquaredVec4(v4), 15.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthSquaredVec4(v4), 15.0f);
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_FLOAT_EQ(HMM_LengthSquared(v2), 5.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthSquared(v2), 5.0f);
|
||||||
EXPECT_FLOAT_EQ(HMM_LengthSquared(v3), 14.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthSquared(v3), 14.0f);
|
||||||
EXPECT_FLOAT_EQ(HMM_LengthSquared(v4), 15.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthSquared(v4), 15.0f);
|
||||||
@@ -352,7 +352,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(HMM_LengthVec3(v3), 7.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthVec3(v3), 7.0f);
|
||||||
EXPECT_FLOAT_EQ(HMM_LengthVec4(v4), 13.892444f);
|
EXPECT_FLOAT_EQ(HMM_LengthVec4(v4), 13.892444f);
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_FLOAT_EQ(HMM_Length(v2), 9.0553856f);
|
EXPECT_FLOAT_EQ(HMM_Length(v2), 9.0553856f);
|
||||||
EXPECT_FLOAT_EQ(HMM_Length(v3), 7.0f);
|
EXPECT_FLOAT_EQ(HMM_Length(v3), 7.0f);
|
||||||
EXPECT_FLOAT_EQ(HMM_Length(v4), 13.892444f);
|
EXPECT_FLOAT_EQ(HMM_Length(v4), 13.892444f);
|
||||||
@@ -388,7 +388,7 @@ int run_tests()
|
|||||||
EXPECT_LT(result.W, 0.0f);
|
EXPECT_LT(result.W, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Normalize(v2);
|
hmm_vec2 result = HMM_Normalize(v2);
|
||||||
EXPECT_FLOAT_EQ(HMM_LengthVec2(result), 1.0f);
|
EXPECT_FLOAT_EQ(HMM_LengthVec2(result), 1.0f);
|
||||||
@@ -439,7 +439,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.W, 0.0f);
|
EXPECT_FLOAT_EQ(result.W, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Normalize(v2);
|
hmm_vec2 result = HMM_Normalize(v2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.0f);
|
EXPECT_FLOAT_EQ(result.X, 0.0f);
|
||||||
@@ -481,7 +481,7 @@ int run_tests()
|
|||||||
hmm_vec2 v2 = HMM_Vec2(3.0f, 4.0f);
|
hmm_vec2 v2 = HMM_Vec2(3.0f, 4.0f);
|
||||||
|
|
||||||
EXPECT_FLOAT_EQ(HMM_DotVec2(v1, v2), 11.0f);
|
EXPECT_FLOAT_EQ(HMM_DotVec2(v1, v2), 11.0f);
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_FLOAT_EQ(HMM_Dot(v1, v2), 11.0f);
|
EXPECT_FLOAT_EQ(HMM_Dot(v1, v2), 11.0f);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -493,7 +493,7 @@ int run_tests()
|
|||||||
hmm_vec3 v2 = HMM_Vec3(4.0f, 5.0f, 6.0f);
|
hmm_vec3 v2 = HMM_Vec3(4.0f, 5.0f, 6.0f);
|
||||||
|
|
||||||
EXPECT_FLOAT_EQ(HMM_DotVec3(v1, v2), 32.0f);
|
EXPECT_FLOAT_EQ(HMM_DotVec3(v1, v2), 32.0f);
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_FLOAT_EQ(HMM_Dot(v1, v2), 32.0f);
|
EXPECT_FLOAT_EQ(HMM_Dot(v1, v2), 32.0f);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -505,7 +505,7 @@ int run_tests()
|
|||||||
hmm_vec4 v2 = HMM_Vec4(5.0f, 6.0f, 7.0f, 8.0f);
|
hmm_vec4 v2 = HMM_Vec4(5.0f, 6.0f, 7.0f, 8.0f);
|
||||||
|
|
||||||
EXPECT_FLOAT_EQ(HMM_DotVec4(v1, v2), 70.0f);
|
EXPECT_FLOAT_EQ(HMM_DotVec4(v1, v2), 70.0f);
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_FLOAT_EQ(HMM_Dot(v1, v2), 70.0f);
|
EXPECT_FLOAT_EQ(HMM_Dot(v1, v2), 70.0f);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -578,7 +578,7 @@ int run_tests()
|
|||||||
float result = HMM_DotQuaternion(q1, q2);
|
float result = HMM_DotQuaternion(q1, q2);
|
||||||
EXPECT_FLOAT_EQ(result, 70.0f);
|
EXPECT_FLOAT_EQ(result, 70.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
float result = HMM_Dot(q1, q2);
|
float result = HMM_Dot(q1, q2);
|
||||||
EXPECT_FLOAT_EQ(result, 70.0f);
|
EXPECT_FLOAT_EQ(result, 70.0f);
|
||||||
@@ -598,7 +598,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 0.5477225575f);
|
EXPECT_FLOAT_EQ(result.Z, 0.5477225575f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 0.7302967433f);
|
EXPECT_FLOAT_EQ(result.W, 0.7302967433f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_quaternion result = HMM_Normalize(q);
|
hmm_quaternion result = HMM_Normalize(q);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.1825741858f);
|
EXPECT_FLOAT_EQ(result.X, 0.1825741858f);
|
||||||
@@ -693,7 +693,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.X, 4.0f);
|
EXPECT_FLOAT_EQ(result.X, 4.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Y, 6.0f);
|
EXPECT_FLOAT_EQ(result.Y, 6.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Add(v2_1, v2_2);
|
hmm_vec2 result = HMM_Add(v2_1, v2_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 4.0f);
|
EXPECT_FLOAT_EQ(result.X, 4.0f);
|
||||||
@@ -723,7 +723,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Y, 7.0f);
|
EXPECT_FLOAT_EQ(result.Y, 7.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Z, 9.0f);
|
EXPECT_FLOAT_EQ(result.Z, 9.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec3 result = HMM_Add(v3_1, v3_2);
|
hmm_vec3 result = HMM_Add(v3_1, v3_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 5.0f);
|
EXPECT_FLOAT_EQ(result.X, 5.0f);
|
||||||
@@ -757,7 +757,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 12.0f);
|
EXPECT_FLOAT_EQ(result.W, 12.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Add(v4_1, v4_2);
|
hmm_vec4 result = HMM_Add(v4_1, v4_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 6.0f);
|
EXPECT_FLOAT_EQ(result.X, 6.0f);
|
||||||
@@ -819,7 +819,7 @@ int run_tests()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_mat4 result = HMM_Add(m4_1, m4_2);
|
hmm_mat4 result = HMM_Add(m4_1, m4_2);
|
||||||
float Expected = 18.0f;
|
float Expected = 18.0f;
|
||||||
@@ -871,7 +871,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 12.0f);
|
EXPECT_FLOAT_EQ(result.W, 12.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_quaternion result = HMM_Add(q1, q2);
|
hmm_quaternion result = HMM_Add(q1, q2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 6.0f);
|
EXPECT_FLOAT_EQ(result.X, 6.0f);
|
||||||
@@ -910,7 +910,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.X, -2.0f);
|
EXPECT_FLOAT_EQ(result.X, -2.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Y, -2.0f);
|
EXPECT_FLOAT_EQ(result.Y, -2.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Subtract(v2_1, v2_2);
|
hmm_vec2 result = HMM_Subtract(v2_1, v2_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, -2.0f);
|
EXPECT_FLOAT_EQ(result.X, -2.0f);
|
||||||
@@ -940,7 +940,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Y, -3.0f);
|
EXPECT_FLOAT_EQ(result.Y, -3.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Z, -3.0f);
|
EXPECT_FLOAT_EQ(result.Z, -3.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec3 result = HMM_Subtract(v3_1, v3_2);
|
hmm_vec3 result = HMM_Subtract(v3_1, v3_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, -3.0f);
|
EXPECT_FLOAT_EQ(result.X, -3.0f);
|
||||||
@@ -974,7 +974,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, -4.0f);
|
EXPECT_FLOAT_EQ(result.Z, -4.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, -4.0f);
|
EXPECT_FLOAT_EQ(result.W, -4.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Subtract(v4_1, v4_2);
|
hmm_vec4 result = HMM_Subtract(v4_1, v4_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, -4.0f);
|
EXPECT_FLOAT_EQ(result.X, -4.0f);
|
||||||
@@ -1034,7 +1034,7 @@ int run_tests()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_mat4 result = HMM_Subtract(m4_1, m4_2);
|
hmm_mat4 result = HMM_Subtract(m4_1, m4_2);
|
||||||
for (int Column = 0; Column < 4; ++Column)
|
for (int Column = 0; Column < 4; ++Column)
|
||||||
@@ -1080,7 +1080,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, -4.0f);
|
EXPECT_FLOAT_EQ(result.Z, -4.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, -4.0f);
|
EXPECT_FLOAT_EQ(result.W, -4.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_quaternion result = HMM_Subtract(q1, q2);
|
hmm_quaternion result = HMM_Subtract(q1, q2);
|
||||||
EXPECT_FLOAT_EQ(result.X, -4.0f);
|
EXPECT_FLOAT_EQ(result.X, -4.0f);
|
||||||
@@ -1119,7 +1119,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Y, 8.0f);
|
EXPECT_FLOAT_EQ(result.Y, 8.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Multiply(v2_1, v2_2);
|
hmm_vec2 result = HMM_Multiply(v2_1, v2_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
||||||
@@ -1148,7 +1148,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Y, 6.0f);
|
EXPECT_FLOAT_EQ(result.Y, 6.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Multiply(v2, s);
|
hmm_vec2 result = HMM_Multiply(v2, s);
|
||||||
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
||||||
@@ -1183,7 +1183,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Y, 10.0f);
|
EXPECT_FLOAT_EQ(result.Y, 10.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Z, 18.0f);
|
EXPECT_FLOAT_EQ(result.Z, 18.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec3 result = HMM_Multiply(v3_1, v3_2);
|
hmm_vec3 result = HMM_Multiply(v3_1, v3_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 4.0f);
|
EXPECT_FLOAT_EQ(result.X, 4.0f);
|
||||||
@@ -1216,7 +1216,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Y, 6.0f);
|
EXPECT_FLOAT_EQ(result.Y, 6.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Z, 9.0f);
|
EXPECT_FLOAT_EQ(result.Z, 9.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec3 result = HMM_Multiply(v3, s);
|
hmm_vec3 result = HMM_Multiply(v3, s);
|
||||||
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
||||||
@@ -1256,7 +1256,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 21.0f);
|
EXPECT_FLOAT_EQ(result.Z, 21.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 32.0f);
|
EXPECT_FLOAT_EQ(result.W, 32.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Multiply(v4_1, v4_2);
|
hmm_vec4 result = HMM_Multiply(v4_1, v4_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 5.0f);
|
EXPECT_FLOAT_EQ(result.X, 5.0f);
|
||||||
@@ -1293,7 +1293,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 9.0f);
|
EXPECT_FLOAT_EQ(result.Z, 9.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 12.0f);
|
EXPECT_FLOAT_EQ(result.W, 12.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Multiply(v4, s);
|
hmm_vec4 result = HMM_Multiply(v4, s);
|
||||||
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
EXPECT_FLOAT_EQ(result.X, 3.0f);
|
||||||
@@ -1368,7 +1368,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Elements[3][2], 1118.0f);
|
EXPECT_FLOAT_EQ(result.Elements[3][2], 1118.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Elements[3][3], 1240.0f);
|
EXPECT_FLOAT_EQ(result.Elements[3][3], 1240.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_mat4 result = HMM_Multiply(m4_1, m4_2);
|
hmm_mat4 result = HMM_Multiply(m4_1, m4_2);
|
||||||
EXPECT_FLOAT_EQ(result.Elements[0][0], 538.0f);
|
EXPECT_FLOAT_EQ(result.Elements[0][0], 538.0f);
|
||||||
@@ -1451,7 +1451,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Elements[3][2], 45.0f);
|
EXPECT_FLOAT_EQ(result.Elements[3][2], 45.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Elements[3][3], 48.0f);
|
EXPECT_FLOAT_EQ(result.Elements[3][3], 48.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_mat4 result = HMM_Multiply(m4, s);
|
hmm_mat4 result = HMM_Multiply(m4, s);
|
||||||
EXPECT_FLOAT_EQ(result.Elements[0][0], 3.0f);
|
EXPECT_FLOAT_EQ(result.Elements[0][0], 3.0f);
|
||||||
@@ -1555,7 +1555,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 110.0f);
|
EXPECT_FLOAT_EQ(result.Z, 110.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 120.0f);
|
EXPECT_FLOAT_EQ(result.W, 120.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Multiply(m4, v4);
|
hmm_vec4 result = HMM_Multiply(m4, v4);
|
||||||
EXPECT_FLOAT_EQ(result.X, 90.0f);
|
EXPECT_FLOAT_EQ(result.X, 90.0f);
|
||||||
@@ -1588,7 +1588,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 48.0f);
|
EXPECT_FLOAT_EQ(result.Z, 48.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, -6.0f);
|
EXPECT_FLOAT_EQ(result.W, -6.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_quaternion result = HMM_Multiply(q1, q2);
|
hmm_quaternion result = HMM_Multiply(q1, q2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 24.0f);
|
EXPECT_FLOAT_EQ(result.X, 24.0f);
|
||||||
@@ -1623,7 +1623,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 6.0f);
|
EXPECT_FLOAT_EQ(result.Z, 6.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 8.0f);
|
EXPECT_FLOAT_EQ(result.W, 8.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_quaternion result = HMM_Multiply(q, f);
|
hmm_quaternion result = HMM_Multiply(q, f);
|
||||||
EXPECT_FLOAT_EQ(result.X, 2.0f);
|
EXPECT_FLOAT_EQ(result.X, 2.0f);
|
||||||
@@ -1669,7 +1669,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
EXPECT_FLOAT_EQ(result.Y, 0.75f);
|
EXPECT_FLOAT_EQ(result.Y, 0.75f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Divide(v2_1, v2_2);
|
hmm_vec2 result = HMM_Divide(v2_1, v2_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -1698,7 +1698,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
EXPECT_FLOAT_EQ(result.Y, 1.0f);
|
EXPECT_FLOAT_EQ(result.Y, 1.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec2 result = HMM_Divide(v2, s);
|
hmm_vec2 result = HMM_Divide(v2, s);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -1728,7 +1728,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Y, 0.75f);
|
EXPECT_FLOAT_EQ(result.Y, 0.75f);
|
||||||
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec3 result = HMM_Divide(v3_1, v3_2);
|
hmm_vec3 result = HMM_Divide(v3_1, v3_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -1761,7 +1761,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Y, 1.0f);
|
EXPECT_FLOAT_EQ(result.Y, 1.0f);
|
||||||
EXPECT_FLOAT_EQ(result.Z, 1.5f);
|
EXPECT_FLOAT_EQ(result.Z, 1.5f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec3 result = HMM_Divide(v3, s);
|
hmm_vec3 result = HMM_Divide(v3, s);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -1795,7 +1795,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
EXPECT_FLOAT_EQ(result.Z, 10.0f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 0.25f);
|
EXPECT_FLOAT_EQ(result.W, 0.25f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Divide(v4_1, v4_2);
|
hmm_vec4 result = HMM_Divide(v4_1, v4_2);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -1832,7 +1832,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 1.5f);
|
EXPECT_FLOAT_EQ(result.Z, 1.5f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 2.0f);
|
EXPECT_FLOAT_EQ(result.W, 2.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_vec4 result = HMM_Divide(v4, s);
|
hmm_vec4 result = HMM_Divide(v4, s);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -1893,7 +1893,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Elements[3][2], 7.5f);
|
EXPECT_FLOAT_EQ(result.Elements[3][2], 7.5f);
|
||||||
EXPECT_FLOAT_EQ(result.Elements[3][3], 8.0f);
|
EXPECT_FLOAT_EQ(result.Elements[3][3], 8.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_mat4 result = HMM_Divide(m4, s);
|
hmm_mat4 result = HMM_Divide(m4, s);
|
||||||
EXPECT_FLOAT_EQ(result.Elements[0][0], 0.5f);
|
EXPECT_FLOAT_EQ(result.Elements[0][0], 0.5f);
|
||||||
@@ -1966,7 +1966,7 @@ int run_tests()
|
|||||||
EXPECT_FLOAT_EQ(result.Z, 1.5f);
|
EXPECT_FLOAT_EQ(result.Z, 1.5f);
|
||||||
EXPECT_FLOAT_EQ(result.W, 2.0f);
|
EXPECT_FLOAT_EQ(result.W, 2.0f);
|
||||||
}
|
}
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
{
|
{
|
||||||
hmm_quaternion result = HMM_Divide(q, f);
|
hmm_quaternion result = HMM_Divide(q, f);
|
||||||
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
EXPECT_FLOAT_EQ(result.X, 0.5f);
|
||||||
@@ -2004,7 +2004,7 @@ int run_tests()
|
|||||||
EXPECT_TRUE(HMM_EqualsVec2(a, b));
|
EXPECT_TRUE(HMM_EqualsVec2(a, b));
|
||||||
EXPECT_FALSE(HMM_EqualsVec2(a, c));
|
EXPECT_FALSE(HMM_EqualsVec2(a, c));
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_TRUE(HMM_Equals(a, b));
|
EXPECT_TRUE(HMM_Equals(a, b));
|
||||||
EXPECT_FALSE(HMM_Equals(a, c));
|
EXPECT_FALSE(HMM_Equals(a, c));
|
||||||
|
|
||||||
@@ -2023,7 +2023,7 @@ int run_tests()
|
|||||||
EXPECT_TRUE(HMM_EqualsVec3(a, b));
|
EXPECT_TRUE(HMM_EqualsVec3(a, b));
|
||||||
EXPECT_FALSE(HMM_EqualsVec3(a, c));
|
EXPECT_FALSE(HMM_EqualsVec3(a, c));
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_TRUE(HMM_Equals(a, b));
|
EXPECT_TRUE(HMM_Equals(a, b));
|
||||||
EXPECT_FALSE(HMM_Equals(a, c));
|
EXPECT_FALSE(HMM_Equals(a, c));
|
||||||
|
|
||||||
@@ -2042,7 +2042,7 @@ int run_tests()
|
|||||||
EXPECT_TRUE(HMM_EqualsVec4(a, b));
|
EXPECT_TRUE(HMM_EqualsVec4(a, b));
|
||||||
EXPECT_FALSE(HMM_EqualsVec4(a, c));
|
EXPECT_FALSE(HMM_EqualsVec4(a, c));
|
||||||
|
|
||||||
#ifdef HANDMADE_MATH_CPP_MODE
|
#ifdef __cplusplus
|
||||||
EXPECT_TRUE(HMM_Equals(a, b));
|
EXPECT_TRUE(HMM_Equals(a, b));
|
||||||
EXPECT_FALSE(HMM_Equals(a, c));
|
EXPECT_FALSE(HMM_Equals(a, c));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user