Finally fix clip rect bug?
This commit is contained in:
		
							parent
							
								
									3d3d741ad6
								
							
						
					
					
						commit
						ee4f8eca17
					
				| @ -83,13 +83,13 @@ void HandmadeMathTestInternal() | |||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		hmm_vec3 hmmVec       = HMM_Vec3i(1, 2, 3); | 		hmm_vec3 hmmVec       = HMM_Vec3i(1, 2, 3); | ||||||
| 		DqnV3 dqnVec          = DqnV3(1, 2, 3); | 		DqnV3 dqnVec          = DqnV3_(1, 2, 3); | ||||||
| 		DqnMat4 dqnTranslate  = DqnMat4_Translate3f(dqnVec.x, dqnVec.y, dqnVec.z); | 		DqnMat4 dqnTranslate  = DqnMat4_Translate3f(dqnVec.x, dqnVec.y, dqnVec.z); | ||||||
| 		hmm_mat4 hmmTranslate = HMM_Translate(hmmVec); | 		hmm_mat4 hmmTranslate = HMM_Translate(hmmVec); | ||||||
| 		HandmadeMathVerifyMat4(dqnTranslate, hmmTranslate); | 		HandmadeMathVerifyMat4(dqnTranslate, hmmTranslate); | ||||||
| 
 | 
 | ||||||
| 		hmm_vec3 hmmAxis      = HMM_Vec3(0.5f, 0.2f, 0.7f); | 		hmm_vec3 hmmAxis      = HMM_Vec3(0.5f, 0.2f, 0.7f); | ||||||
| 		DqnV3 dqnAxis         = DqnV3(0.5f, 0.2f, 0.7f); | 		DqnV3 dqnAxis         = DqnV3_(0.5f, 0.2f, 0.7f); | ||||||
| 		f32 rotationInDegrees = 80.0f; | 		f32 rotationInDegrees = 80.0f; | ||||||
| 
 | 
 | ||||||
| 		DqnMat4 dqnRotate = DqnMat4_Rotate(DQN_DEGREES_TO_RADIANS(rotationInDegrees), dqnAxis.x, | 		DqnMat4 dqnRotate = DqnMat4_Rotate(DQN_DEGREES_TO_RADIANS(rotationInDegrees), dqnAxis.x, | ||||||
| @ -110,7 +110,7 @@ void HandmadeMathTestInternal() | |||||||
| 		// Test Mat4 * MulV4
 | 		// Test Mat4 * MulV4
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV4 dqnV4    = DqnV4(1, 2, 3, 4); | 			DqnV4 dqnV4    = DqnV4_(1, 2, 3, 4); | ||||||
| 			hmm_vec4 hmmV4 = HMM_Vec4(1, 2, 3, 4); | 			hmm_vec4 hmmV4 = HMM_Vec4(1, 2, 3, 4); | ||||||
| 
 | 
 | ||||||
| 			DqnV4 dqnResult    = DqnMat4_MulV4(dqnTSMatrix, dqnV4); | 			DqnV4 dqnResult    = DqnMat4_MulV4(dqnTSMatrix, dqnV4); | ||||||
| @ -703,82 +703,82 @@ void DqnVX_Test() | |||||||
| 		// V2 Creating
 | 		// V2 Creating
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 vec = DqnV2(5.5f, 5.0f); | 			DqnV2 vec = DqnV2_(5.5f, 5.0f); | ||||||
| 			DQN_ASSERT(vec.x == 5.5f && vec.y == 5.0f); | 			DQN_ASSERT(vec.x == 5.5f && vec.y == 5.0f); | ||||||
| 			DQN_ASSERT(vec.w == 5.5f && vec.h == 5.0f); | 			DQN_ASSERT(vec.w == 5.5f && vec.h == 5.0f); | ||||||
| 			LogSuccess("DqnV2(): Creating"); | 			LogSuccess("DqnV2_(): Creating"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V2 with 2 integers
 | 		// V2 with 2 integers
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 vec = DqnV2(3, 5); | 			DqnV2 vec = DqnV2_(3, 5); | ||||||
| 			DQN_ASSERT(vec.x == 3 && vec.y == 5.0f); | 			DQN_ASSERT(vec.x == 3 && vec.y == 5.0f); | ||||||
| 			DQN_ASSERT(vec.w == 3 && vec.h == 5.0f); | 			DQN_ASSERT(vec.w == 3 && vec.h == 5.0f); | ||||||
| 			LogSuccess("DqnV2(): with 2 integers"); | 			LogSuccess("DqnV2_(): with 2 integers"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V2 Arithmetic
 | 		// V2 Arithmetic
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 vecA = DqnV2(5, 10); | 			DqnV2 vecA = DqnV2_(5, 10); | ||||||
| 			DqnV2 vecB = DqnV2(2, 3); | 			DqnV2 vecB = DqnV2_(2, 3); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(vecA, vecB) == false); | 			DQN_ASSERT(DqnV2_Equals(vecA, vecB) == false); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(vecA, DqnV2(5, 10)) == true); | 			DQN_ASSERT(DqnV2_Equals(vecA, DqnV2_(5, 10)) == true); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(vecB, DqnV2(2, 3)) == true); | 			DQN_ASSERT(DqnV2_Equals(vecB, DqnV2_(2, 3)) == true); | ||||||
| 
 | 
 | ||||||
| 			DqnV2 result = DqnV2_Add(vecA, DqnV2(5, 10)); | 			DqnV2 result = DqnV2_Add(vecA,  DqnV2_(5, 10)); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(result, DqnV2(10, 20)) == true); | 			DQN_ASSERT(DqnV2_Equals(result, DqnV2_(10, 20)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV2_Sub(result, DqnV2(5, 10)); | 			result = DqnV2_Sub(result, DqnV2_(5, 10)); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(result, DqnV2(5, 10)) == true); | 			DQN_ASSERT(DqnV2_Equals(result, DqnV2_(5, 10)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV2_Scalef(result, 5); | 			result = DqnV2_Scalef(result, 5); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(result, DqnV2(25, 50)) == true); | 			DQN_ASSERT(DqnV2_Equals(result, DqnV2_(25, 50)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV2_Hadamard(result, DqnV2(10.0f, 0.5f)); | 			result = DqnV2_Hadamard(result, DqnV2_(10.0f, 0.5f)); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(result, DqnV2(250, 25)) == true); | 			DQN_ASSERT(DqnV2_Equals(result, DqnV2_(250, 25)) == true); | ||||||
| 
 | 
 | ||||||
| 			f32 dotResult = DqnV2_Dot(DqnV2(5, 10), DqnV2(3, 4)); | 			f32 dotResult = DqnV2_Dot(DqnV2_(5, 10), DqnV2_(3, 4)); | ||||||
| 			DQN_ASSERT(dotResult == 55); | 			DQN_ASSERT(dotResult == 55); | ||||||
| 			LogSuccess("DqnV2(): Arithmetic"); | 			LogSuccess("DqnV2_(): Arithmetic"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Test operator overloading
 | 		// Test operator overloading
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 vecA = DqnV2(5, 10); | 			DqnV2 vecA = DqnV2_(5, 10); | ||||||
| 			DqnV2 vecB = DqnV2(2, 3); | 			DqnV2 vecB = DqnV2_(2, 3); | ||||||
| 			DQN_ASSERT((vecA == vecB) == false); | 			DQN_ASSERT((vecA == vecB) == false); | ||||||
| 			DQN_ASSERT((vecA == DqnV2(5, 10)) == true); | 			DQN_ASSERT((vecA == DqnV2_(5, 10)) == true); | ||||||
| 			DQN_ASSERT((vecB == DqnV2(2, 3)) == true); | 			DQN_ASSERT((vecB == DqnV2_(2, 3)) == true); | ||||||
| 
 | 
 | ||||||
| 			DqnV2 result = vecA + DqnV2(5, 10); | 			DqnV2 result = vecA + DqnV2_(5, 10); | ||||||
| 			DQN_ASSERT((result == DqnV2(10, 20)) == true); | 			DQN_ASSERT((result == DqnV2_(10, 20)) == true); | ||||||
| 
 | 
 | ||||||
| 			result -= DqnV2(5, 10); | 			result -= DqnV2_(5, 10); | ||||||
| 			DQN_ASSERT((result == DqnV2(5, 10)) == true); | 			DQN_ASSERT((result == DqnV2_(5, 10)) == true); | ||||||
| 
 | 
 | ||||||
| 			result *= 5; | 			result *= 5; | ||||||
| 			DQN_ASSERT((result == DqnV2(25, 50)) == true); | 			DQN_ASSERT((result == DqnV2_(25, 50)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = result * DqnV2(10.0f, 0.5f); | 			result = result * DqnV2_(10.0f, 0.5f); | ||||||
| 			DQN_ASSERT((result == DqnV2(250, 25)) == true); | 			DQN_ASSERT((result == DqnV2_(250, 25)) == true); | ||||||
| 
 | 
 | ||||||
| 			result += DqnV2(1, 1); | 			result += DqnV2_(1, 1); | ||||||
| 			DQN_ASSERT((result == DqnV2(251, 26)) == true); | 			DQN_ASSERT((result == DqnV2_(251, 26)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = result - DqnV2(1, 1); | 			result = result - DqnV2_(1, 1); | ||||||
| 			DQN_ASSERT((result == DqnV2(250, 25)) == true); | 			DQN_ASSERT((result == DqnV2_(250, 25)) == true); | ||||||
| 			LogSuccess("DqnV2(): operator overloading"); | 			LogSuccess("DqnV2_(): operator overloading"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V2 Properties
 | 		// V2 Properties
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			const f32 EPSILON = 0.001f; | 			const f32 EPSILON = 0.001f; | ||||||
| 			DqnV2 a           = DqnV2(0, 0); | 			DqnV2 a           = DqnV2_(0, 0); | ||||||
| 			DqnV2 b           = DqnV2(3, 4); | 			DqnV2 b           = DqnV2_(3, 4); | ||||||
| 
 | 
 | ||||||
| 			f32 lengthSq = DqnV2_LengthSquared(a, b); | 			f32 lengthSq = DqnV2_LengthSquared(a, b); | ||||||
| 			DQN_ASSERT(lengthSq == 25); | 			DQN_ASSERT(lengthSq == 25); | ||||||
| @ -796,21 +796,21 @@ void DqnVX_Test() | |||||||
| 			DQN_ASSERT_MSG(diffNormY < EPSILON, "normalised.y: %f, normY: %f\n", normalised.y, | 			DQN_ASSERT_MSG(diffNormY < EPSILON, "normalised.y: %f, normY: %f\n", normalised.y, | ||||||
| 			               normY); | 			               normY); | ||||||
| 
 | 
 | ||||||
| 			DqnV2 c = DqnV2(3.5f, 8.0f); | 			DqnV2 c = DqnV2_(3.5f, 8.0f); | ||||||
| 			DQN_ASSERT(DqnV2_Overlaps(b, c) == true); | 			DQN_ASSERT(DqnV2_Overlaps(b, c) == true); | ||||||
| 			DQN_ASSERT(DqnV2_Overlaps(b, a) == false); | 			DQN_ASSERT(DqnV2_Overlaps(b, a) == false); | ||||||
| 
 | 
 | ||||||
| 			DqnV2 d = DqnV2_Perpendicular(c); | 			DqnV2 d = DqnV2_Perpendicular(c); | ||||||
| 			DQN_ASSERT(DqnV2_Dot(c, d) == 0); | 			DQN_ASSERT(DqnV2_Dot(c, d) == 0); | ||||||
| 
 | 
 | ||||||
| 			LogSuccess("DqnV2(): LengthSquared, Length, Normalize, Overlaps, Perp"); | 			LogSuccess("DqnV2_(): LengthSquared, Length, Normalize, Overlaps, Perp"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V2 ConstrainToRatio
 | 		// V2 ConstrainToRatio
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 ratio  = DqnV2(16, 9); | 			DqnV2 ratio  = DqnV2_(16, 9); | ||||||
| 			DqnV2 dim    = DqnV2(2000, 1080); | 			DqnV2 dim    = DqnV2_(2000, 1080); | ||||||
| 			DqnV2 result = DqnV2_ConstrainToRatio(dim, ratio); | 			DqnV2 result = DqnV2_ConstrainToRatio(dim, ratio); | ||||||
| 			DQN_ASSERT(result.w == 1920 && result.h == 1080); | 			DQN_ASSERT(result.w == 1920 && result.h == 1080); | ||||||
| 			LogSuccess("DqnV2->ConstrainToRatio()"); | 			LogSuccess("DqnV2->ConstrainToRatio()"); | ||||||
| @ -823,77 +823,77 @@ void DqnVX_Test() | |||||||
| 		// V3i Creating
 | 		// V3i Creating
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV3 vec = DqnV3(5.5f, 5.0f, 5.875f); | 			DqnV3 vec = DqnV3_(5.5f, 5.0f, 5.875f); | ||||||
| 			DQN_ASSERT(vec.x == 5.5f && vec.y == 5.0f && vec.z == 5.875f); | 			DQN_ASSERT(vec.x == 5.5f && vec.y == 5.0f && vec.z == 5.875f); | ||||||
| 			DQN_ASSERT(vec.r == 5.5f && vec.g == 5.0f && vec.b == 5.875f); | 			DQN_ASSERT(vec.r == 5.5f && vec.g == 5.0f && vec.b == 5.875f); | ||||||
| 			LogSuccess("DqnV3(): Creating"); | 			LogSuccess("DqnV3_(): Creating"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V3i Creating
 | 		// V3i Creating
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV3 vec = DqnV3(3, 4, 5); | 			DqnV3 vec = DqnV3_(3, 4, 5); | ||||||
| 			DQN_ASSERT(vec.x == 3 && vec.y == 4 && vec.z == 5); | 			DQN_ASSERT(vec.x == 3 && vec.y == 4 && vec.z == 5); | ||||||
| 			DQN_ASSERT(vec.r == 3 && vec.g == 4 && vec.b == 5); | 			DQN_ASSERT(vec.r == 3 && vec.g == 4 && vec.b == 5); | ||||||
| 			LogSuccess("DqnV3(): Creating"); | 			LogSuccess("DqnV3_(): Creating"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V3 Arithmetic
 | 		// V3 Arithmetic
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV3 vecA = DqnV3(5, 10, 15); | 			DqnV3 vecA = DqnV3_(5, 10, 15); | ||||||
| 			DqnV3 vecB = DqnV3(2, 3, 6); | 			DqnV3 vecB = DqnV3_(2, 3, 6); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(vecA, vecB) == false); | 			DQN_ASSERT(DqnV3_Equals(vecA, vecB) == false); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(vecA, DqnV3(5, 10, 15)) == true); | 			DQN_ASSERT(DqnV3_Equals(vecA, DqnV3_(5, 10, 15)) == true); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(vecB, DqnV3(2, 3, 6)) == true); | 			DQN_ASSERT(DqnV3_Equals(vecB, DqnV3_(2, 3, 6)) == true); | ||||||
| 
 | 
 | ||||||
| 			DqnV3 result = DqnV3_Add(vecA, DqnV3(5, 10, 15)); | 			DqnV3 result = DqnV3_Add(vecA, DqnV3_(5, 10, 15)); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(result, DqnV3(10, 20, 30)) == true); | 			DQN_ASSERT(DqnV3_Equals(result, DqnV3_(10, 20, 30)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV3_Sub(result, DqnV3(5, 10, 15)); | 			result = DqnV3_Sub(result, DqnV3_(5, 10, 15)); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(result, DqnV3(5, 10, 15)) == true); | 			DQN_ASSERT(DqnV3_Equals(result, DqnV3_(5, 10, 15)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV3_Scalef(result, 5); | 			result = DqnV3_Scalef(result, 5); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(result, DqnV3(25, 50, 75)) == true); | 			DQN_ASSERT(DqnV3_Equals(result, DqnV3_(25, 50, 75)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV3_Hadamard(result, DqnV3(10.0f, 0.5f, 10.0f)); | 			result = DqnV3_Hadamard(result, DqnV3_(10.0f, 0.5f, 10.0f)); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(result, DqnV3(250, 25, 750)) == true); | 			DQN_ASSERT(DqnV3_Equals(result, DqnV3_(250, 25, 750)) == true); | ||||||
| 
 | 
 | ||||||
| 			f32 dotResult = DqnV3_Dot(DqnV3(5, 10, 2), DqnV3(3, 4, 6)); | 			f32 dotResult = DqnV3_Dot(DqnV3_(5, 10, 2), DqnV3_(3, 4, 6)); | ||||||
| 			DQN_ASSERT(dotResult == 67); | 			DQN_ASSERT(dotResult == 67); | ||||||
| 
 | 
 | ||||||
| 			DqnV3 cross = DqnV3_Cross(vecA, vecB); | 			DqnV3 cross = DqnV3_Cross(vecA, vecB); | ||||||
| 			DQN_ASSERT(DqnV3_Equals(cross, DqnV3(15, 0, -5)) == true); | 			DQN_ASSERT(DqnV3_Equals(cross, DqnV3_(15, 0, -5)) == true); | ||||||
| 			LogSuccess("DqnV3(): Arithmetic"); | 			LogSuccess("DqnV3_(): Arithmetic"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V3 More Arithmetic
 | 		// V3 More Arithmetic
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV3 vecA = DqnV3(5, 10, 15); | 			DqnV3 vecA = DqnV3_(5, 10, 15); | ||||||
| 			DqnV3 vecB = DqnV3(2, 3, 6); | 			DqnV3 vecB = DqnV3_(2, 3, 6); | ||||||
| 			DQN_ASSERT((vecA == vecB) == false); | 			DQN_ASSERT((vecA == vecB) == false); | ||||||
| 			DQN_ASSERT((vecA == DqnV3(5, 10, 15)) == true); | 			DQN_ASSERT((vecA == DqnV3_(5, 10, 15)) == true); | ||||||
| 			DQN_ASSERT((vecB == DqnV3(2, 3, 6)) == true); | 			DQN_ASSERT((vecB == DqnV3_(2, 3, 6)) == true); | ||||||
| 
 | 
 | ||||||
| 			DqnV3 result = vecA + DqnV3(5, 10, 15); | 			DqnV3 result = vecA + DqnV3_(5, 10, 15); | ||||||
| 			DQN_ASSERT((result == DqnV3(10, 20, 30)) == true); | 			DQN_ASSERT((result == DqnV3_(10, 20, 30)) == true); | ||||||
| 
 | 
 | ||||||
| 			result -= DqnV3(5, 10, 15); | 			result -= DqnV3_(5, 10, 15); | ||||||
| 			DQN_ASSERT((result == DqnV3(5, 10, 15)) == true); | 			DQN_ASSERT((result == DqnV3_(5, 10, 15)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = result * 5; | 			result = result * 5; | ||||||
| 			DQN_ASSERT((result == DqnV3(25, 50, 75)) == true); | 			DQN_ASSERT((result == DqnV3_(25, 50, 75)) == true); | ||||||
| 
 | 
 | ||||||
| 			result *= DqnV3(10.0f, 0.5f, 10.0f); | 			result *= DqnV3_(10.0f, 0.5f, 10.0f); | ||||||
| 			DQN_ASSERT((result == DqnV3(250, 25, 750)) == true); | 			DQN_ASSERT((result == DqnV3_(250, 25, 750)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = result - DqnV3(1, 1, 1); | 			result = result - DqnV3_(1, 1, 1); | ||||||
| 			DQN_ASSERT((result == DqnV3(249, 24, 749)) == true); | 			DQN_ASSERT((result == DqnV3_(249, 24, 749)) == true); | ||||||
| 
 | 
 | ||||||
| 			result += DqnV3(1, 1, 1); | 			result += DqnV3_(1, 1, 1); | ||||||
| 			DQN_ASSERT((result == DqnV3(250, 25, 750)) == true); | 			DQN_ASSERT((result == DqnV3_(250, 25, 750)) == true); | ||||||
| 			LogSuccess("DqnV3(): More Arithmetic"); | 			LogSuccess("DqnV3_(): More Arithmetic"); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -904,74 +904,74 @@ void DqnVX_Test() | |||||||
| 		// V4 Creating
 | 		// V4 Creating
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV4 vec = DqnV4(5.5f, 5.0f, 5.875f, 5.928f); | 			DqnV4 vec = DqnV4_(5.5f, 5.0f, 5.875f, 5.928f); | ||||||
| 			DQN_ASSERT(vec.x == 5.5f && vec.y == 5.0f && vec.z == 5.875f && vec.w == 5.928f); | 			DQN_ASSERT(vec.x == 5.5f && vec.y == 5.0f && vec.z == 5.875f && vec.w == 5.928f); | ||||||
| 			DQN_ASSERT(vec.r == 5.5f && vec.g == 5.0f && vec.b == 5.875f && vec.a == 5.928f); | 			DQN_ASSERT(vec.r == 5.5f && vec.g == 5.0f && vec.b == 5.875f && vec.a == 5.928f); | ||||||
| 			LogSuccess("DqnV4(): Creating"); | 			LogSuccess("DqnV4_(): Creating"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V4i Creating
 | 		// V4i Creating
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV4 vec = DqnV4(3, 4, 5, 6); | 			DqnV4 vec = DqnV4_(3, 4, 5, 6); | ||||||
| 			DQN_ASSERT(vec.x == 3 && vec.y == 4 && vec.z == 5 && vec.w == 6); | 			DQN_ASSERT(vec.x == 3 && vec.y == 4 && vec.z == 5 && vec.w == 6); | ||||||
| 			DQN_ASSERT(vec.r == 3 && vec.g == 4 && vec.b == 5 && vec.a == 6); | 			DQN_ASSERT(vec.r == 3 && vec.g == 4 && vec.b == 5 && vec.a == 6); | ||||||
| 			LogSuccess("DqnV4(): Integer ctor creating"); | 			LogSuccess("DqnV4_(): Integer ctor creating"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V4 Arithmetic
 | 		// V4 Arithmetic
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV4 vecA = DqnV4(5, 10, 15, 20); | 			DqnV4 vecA = DqnV4_(5, 10, 15, 20); | ||||||
| 			DqnV4 vecB = DqnV4(2, 3, 6, 8); | 			DqnV4 vecB = DqnV4_(2, 3, 6, 8); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(vecA, vecB) == false); | 			DQN_ASSERT(DqnV4_Equals(vecA, vecB) == false); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(vecA, DqnV4(5, 10, 15, 20)) == true); | 			DQN_ASSERT(DqnV4_Equals(vecA, DqnV4_(5, 10, 15, 20)) == true); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(vecB, DqnV4(2, 3, 6, 8)) == true); | 			DQN_ASSERT(DqnV4_Equals(vecB, DqnV4_(2, 3, 6, 8)) == true); | ||||||
| 
 | 
 | ||||||
| 			DqnV4 result = DqnV4_Add(vecA, DqnV4(5, 10, 15, 20)); | 			DqnV4 result = DqnV4_Add(vecA, DqnV4_(5, 10, 15, 20)); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(result, DqnV4(10, 20, 30, 40)) == true); | 			DQN_ASSERT(DqnV4_Equals(result, DqnV4_(10, 20, 30, 40)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV4_Sub(result, DqnV4(5, 10, 15, 20)); | 			result = DqnV4_Sub(result, DqnV4_(5, 10, 15, 20)); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(result, DqnV4(5, 10, 15, 20)) == true); | 			DQN_ASSERT(DqnV4_Equals(result, DqnV4_(5, 10, 15, 20)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV4_Scalef(result, 5); | 			result = DqnV4_Scalef(result, 5); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(result, DqnV4(25, 50, 75, 100)) == true); | 			DQN_ASSERT(DqnV4_Equals(result, DqnV4_(25, 50, 75, 100)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = DqnV4_Hadamard(result, DqnV4(10.0f, 0.5f, 10.0f, 0.25f)); | 			result = DqnV4_Hadamard(result, DqnV4_(10.0f, 0.5f, 10.0f, 0.25f)); | ||||||
| 			DQN_ASSERT(DqnV4_Equals(result, DqnV4(250, 25, 750, 25)) == true); | 			DQN_ASSERT(DqnV4_Equals(result, DqnV4_(250, 25, 750, 25)) == true); | ||||||
| 
 | 
 | ||||||
| 			f32 dotResult = DqnV4_Dot(DqnV4(5, 10, 2, 8), DqnV4(3, 4, 6, 5)); | 			f32 dotResult = DqnV4_Dot(DqnV4_(5, 10, 2, 8), DqnV4_(3, 4, 6, 5)); | ||||||
| 			DQN_ASSERT(dotResult == 107); | 			DQN_ASSERT(dotResult == 107); | ||||||
| 			LogSuccess("DqnV4(): Arithmetic"); | 			LogSuccess("DqnV4_(): Arithmetic"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// V4 More Arthmetic
 | 		// V4 More Arthmetic
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV4 vecA = DqnV4(5, 10, 15, 20); | 			DqnV4 vecA = DqnV4_(5, 10, 15, 20); | ||||||
| 			DqnV4 vecB = DqnV4(2, 3, 6, 8); | 			DqnV4 vecB = DqnV4_(2, 3, 6, 8); | ||||||
| 			DQN_ASSERT((vecA == vecB) == false); | 			DQN_ASSERT((vecA == vecB) == false); | ||||||
| 			DQN_ASSERT((vecA == DqnV4(5, 10, 15, 20)) == true); | 			DQN_ASSERT((vecA == DqnV4_(5, 10, 15, 20)) == true); | ||||||
| 			DQN_ASSERT((vecB == DqnV4(2, 3, 6, 8)) == true); | 			DQN_ASSERT((vecB == DqnV4_(2, 3, 6, 8)) == true); | ||||||
| 
 | 
 | ||||||
| 			DqnV4 result = vecA + DqnV4(5, 10, 15, 20); | 			DqnV4 result = vecA + DqnV4_(5, 10, 15, 20); | ||||||
| 			DQN_ASSERT((result == DqnV4(10, 20, 30, 40)) == true); | 			DQN_ASSERT((result == DqnV4_(10, 20, 30, 40)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = result - DqnV4(5, 10, 15, 20); | 			result = result - DqnV4_(5, 10, 15, 20); | ||||||
| 			DQN_ASSERT((result == DqnV4(5, 10, 15, 20)) == true); | 			DQN_ASSERT((result == DqnV4_(5, 10, 15, 20)) == true); | ||||||
| 
 | 
 | ||||||
| 			result = result * 5; | 			result = result * 5; | ||||||
| 			DQN_ASSERT((result == DqnV4(25, 50, 75, 100)) == true); | 			DQN_ASSERT((result == DqnV4_(25, 50, 75, 100)) == true); | ||||||
| 
 | 
 | ||||||
| 			result *= DqnV4(10.0f, 0.5f, 10.0f, 0.25f); | 			result *= DqnV4_(10.0f, 0.5f, 10.0f, 0.25f); | ||||||
| 			DQN_ASSERT((result == DqnV4(250, 25, 750, 25)) == true); | 			DQN_ASSERT((result == DqnV4_(250, 25, 750, 25)) == true); | ||||||
| 
 | 
 | ||||||
| 			result += DqnV4(1, 1, 1, 1); | 			result += DqnV4_(1, 1, 1, 1); | ||||||
| 			DQN_ASSERT((result == DqnV4(251, 26, 751, 26)) == true); | 			DQN_ASSERT((result == DqnV4_(251, 26, 751, 26)) == true); | ||||||
| 
 | 
 | ||||||
| 			result -= DqnV4(1, 1, 1, 1); | 			result -= DqnV4_(1, 1, 1, 1); | ||||||
| 			DQN_ASSERT((result == DqnV4(250, 25, 750, 25)) == true); | 			DQN_ASSERT((result == DqnV4_(250, 25, 750, 25)) == true); | ||||||
| 			LogSuccess("DqnV4(): More Arthmetic"); | 			LogSuccess("DqnV4_(): More Arthmetic"); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @ -984,8 +984,8 @@ void DqnRect_Test() | |||||||
| 		// Test rect init functions
 | 		// Test rect init functions
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnRect rect4f = DqnRect(1.1f, 2.2f, 3.3f, 4.4f); | 			DqnRect rect4f = DqnRect_(1.1f, 2.2f, 3.3f, 4.4f); | ||||||
| 			DqnRect rect4i = DqnRect(1, 2, 3, 4); | 			DqnRect rect4i = DqnRect_(1, 2, 3, 4); | ||||||
| 
 | 
 | ||||||
| 			DQN_ASSERT(rect4i.min.x == 1 && rect4i.min.y == 2); | 			DQN_ASSERT(rect4i.min.x == 1 && rect4i.min.y == 2); | ||||||
| 			DQN_ASSERT(rect4i.max.x == 4 && rect4i.max.y == 6); | 			DQN_ASSERT(rect4i.max.x == 4 && rect4i.max.y == 6); | ||||||
| @ -996,10 +996,10 @@ void DqnRect_Test() | |||||||
| 			DQN_ASSERT(rect4f.min.x == 1.1f && rect4f.min.y == 2.2f); | 			DQN_ASSERT(rect4f.min.x == 1.1f && rect4f.min.y == 2.2f); | ||||||
| 			DQN_ASSERT(DQN_ABS(diffMaxX) < EPSILON && DQN_ABS(diffMaxY) < EPSILON); | 			DQN_ASSERT(DQN_ABS(diffMaxX) < EPSILON && DQN_ABS(diffMaxY) < EPSILON); | ||||||
| 
 | 
 | ||||||
| 			DqnRect rect = DqnRect(-10, -10, 20, 20); | 			DqnRect rect = DqnRect_(-10, -10, 20, 20); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(rect.min, DqnV2(-10, -10))); | 			DQN_ASSERT(DqnV2_Equals(rect.min, DqnV2_(-10, -10))); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(rect.max, DqnV2(10, 10))); | 			DQN_ASSERT(DqnV2_Equals(rect.max, DqnV2_(10, 10))); | ||||||
| 			LogSuccess("DqnRect(): Test rect init functions"); | 			LogSuccess("DqnRect_(): Test rect init functions"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Test rect get size function
 | 		// Test rect get size function
 | ||||||
| @ -1008,7 +1008,7 @@ void DqnRect_Test() | |||||||
| 			// Test float rect
 | 			// Test float rect
 | ||||||
| 			if (1) | 			if (1) | ||||||
| 			{ | 			{ | ||||||
| 				DqnRect rect = DqnRect(DqnV2(-10, -10), DqnV2(20, 20)); | 				DqnRect rect = DqnRect_(DqnV2_(-10, -10), DqnV2_(20, 20)); | ||||||
| 
 | 
 | ||||||
| 				f32 width, height; | 				f32 width, height; | ||||||
| 				rect.GetSize(&width, &height); | 				rect.GetSize(&width, &height); | ||||||
| @ -1016,19 +1016,19 @@ void DqnRect_Test() | |||||||
| 				DQN_ASSERT(height == 20); | 				DQN_ASSERT(height == 20); | ||||||
| 
 | 
 | ||||||
| 				DqnV2 dim = rect.GetSize(); | 				DqnV2 dim = rect.GetSize(); | ||||||
| 				DQN_ASSERT(DqnV2_Equals(dim, DqnV2(20, 20))); | 				DQN_ASSERT(DqnV2_Equals(dim, DqnV2_(20, 20))); | ||||||
| 				LogSuccess("DqnRect->GetSize(): Test float rect"); | 				LogSuccess("DqnRect->GetSize(): Test float rect"); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Test rect get centre
 | 		// Test rect get centre
 | ||||||
| 		DqnRect rect     = DqnRect(DqnV2(-10, -10), DqnV2(20, 20)); | 		DqnRect rect     = DqnRect_(DqnV2_(-10, -10), DqnV2_(20, 20)); | ||||||
| 		DqnV2 rectCenter = rect.GetCenter(); | 		DqnV2 rectCenter = rect.GetCenter(); | ||||||
| 		DQN_ASSERT(DqnV2_Equals(rectCenter, DqnV2(0, 0))); | 		DQN_ASSERT(DqnV2_Equals(rectCenter, DqnV2_(0, 0))); | ||||||
| 		LogSuccess("DqnRect->GetCentre()"); | 		LogSuccess("DqnRect->GetCentre()"); | ||||||
| 
 | 
 | ||||||
| 		// Test clipping rect get centre
 | 		// Test clipping rect get centre
 | ||||||
| 		DqnRect clipRect   = DqnRect(-15, -15, 10, 10); | 		DqnRect clipRect   = DqnRect_(DqnV2_(-15, -15), DqnV2_(10, 10) + DqnV2_(15)); | ||||||
| 		DqnRect clipResult = rect.ClipRect(clipRect); | 		DqnRect clipResult = rect.ClipRect(clipRect); | ||||||
| 		DQN_ASSERT(clipResult.min.x == -10 && clipResult.min.y == -10); | 		DQN_ASSERT(clipResult.min.x == -10 && clipResult.min.y == -10); | ||||||
| 		DQN_ASSERT(clipResult.max.x == 10 && clipResult.max.y == 10); | 		DQN_ASSERT(clipResult.max.x == 10 && clipResult.max.y == 10); | ||||||
| @ -1037,9 +1037,9 @@ void DqnRect_Test() | |||||||
| 		// Test shifting rect
 | 		// Test shifting rect
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnRect shiftedRect = rect.Move(DqnV2(10, 0)); | 			DqnRect shiftedRect = rect.Move(DqnV2_(10, 0)); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(shiftedRect.min, DqnV2(0, -10))); | 			DQN_ASSERT(DqnV2_Equals(shiftedRect.min, DqnV2_(0, -10))); | ||||||
| 			DQN_ASSERT(DqnV2_Equals(shiftedRect.max, DqnV2(20, 10))); | 			DQN_ASSERT(DqnV2_Equals(shiftedRect.max, DqnV2_(20, 10))); | ||||||
| 
 | 
 | ||||||
| 			// Ensure dimensions have remained the same
 | 			// Ensure dimensions have remained the same
 | ||||||
| 			if (1) | 			if (1) | ||||||
| @ -1050,14 +1050,14 @@ void DqnRect_Test() | |||||||
| 				DQN_ASSERT(height == 20); | 				DQN_ASSERT(height == 20); | ||||||
| 
 | 
 | ||||||
| 				DqnV2 dim = shiftedRect.GetSize(); | 				DqnV2 dim = shiftedRect.GetSize(); | ||||||
| 				DQN_ASSERT(DqnV2_Equals(dim, DqnV2(20, 20))); | 				DQN_ASSERT(DqnV2_Equals(dim, DqnV2_(20, 20))); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			// Test rect contains p
 | 			// Test rect contains p
 | ||||||
| 			if (1) | 			if (1) | ||||||
| 			{ | 			{ | ||||||
| 				DqnV2 inP  = DqnV2(5, 5); | 				DqnV2 inP  = DqnV2_(5, 5); | ||||||
| 				DqnV2 outP = DqnV2(100, 100); | 				DqnV2 outP = DqnV2_(100, 100); | ||||||
| 				DQN_ASSERT(shiftedRect.ContainsP(inP)); | 				DQN_ASSERT(shiftedRect.ContainsP(inP)); | ||||||
| 				DQN_ASSERT(!shiftedRect.ContainsP(outP)); | 				DQN_ASSERT(!shiftedRect.ContainsP(outP)); | ||||||
| 			} | 			} | ||||||
| @ -1081,7 +1081,7 @@ void DqnArray_TestInternal(const DqnMemAPI memAPI) | |||||||
| 			// Test basic insert
 | 			// Test basic insert
 | ||||||
| 			if (1) | 			if (1) | ||||||
| 			{ | 			{ | ||||||
| 				DqnV2 va = DqnV2(5, 10); | 				DqnV2 va = DqnV2_(5, 10); | ||||||
| 				DQN_ASSERT(array.Push(va)); | 				DQN_ASSERT(array.Push(va)); | ||||||
| 
 | 
 | ||||||
| 				DqnV2 vb = array.data[0]; | 				DqnV2 vb = array.data[0]; | ||||||
| @ -1095,7 +1095,7 @@ void DqnArray_TestInternal(const DqnMemAPI memAPI) | |||||||
| 			// Test array resizing and freeing
 | 			// Test array resizing and freeing
 | ||||||
| 			if (1) | 			if (1) | ||||||
| 			{ | 			{ | ||||||
| 				DqnV2 va = DqnV2(10, 15); | 				DqnV2 va = DqnV2_(10, 15); | ||||||
| 				DQN_ASSERT(array.Push(va)); | 				DQN_ASSERT(array.Push(va)); | ||||||
| 
 | 
 | ||||||
| 				DqnV2 vb = array.data[0]; | 				DqnV2 vb = array.data[0]; | ||||||
| @ -1143,7 +1143,7 @@ void DqnArray_TestInternal(const DqnMemAPI memAPI) | |||||||
| 				DQN_ASSERT(array.max >= 11); | 				DQN_ASSERT(array.max >= 11); | ||||||
| 				DQN_ASSERT(array.count == 11); | 				DQN_ASSERT(array.count == 11); | ||||||
| 
 | 
 | ||||||
| 				DqnV2 vc = DqnV2(90, 100); | 				DqnV2 vc = DqnV2_(90, 100); | ||||||
| 				DQN_ASSERT(array.Push(vc)); | 				DQN_ASSERT(array.Push(vc)); | ||||||
| 				DQN_ASSERT(array.max >= 12); | 				DQN_ASSERT(array.max >= 12); | ||||||
| 				DQN_ASSERT(array.count == 12); | 				DQN_ASSERT(array.count == 12); | ||||||
| @ -1165,10 +1165,10 @@ void DqnArray_TestInternal(const DqnMemAPI memAPI) | |||||||
| 
 | 
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 a = DqnV2(1, 2); | 			DqnV2 a = DqnV2_(1, 2); | ||||||
| 			DqnV2 b = DqnV2(3, 4); | 			DqnV2 b = DqnV2_(3, 4); | ||||||
| 			DqnV2 c = DqnV2(5, 6); | 			DqnV2 c = DqnV2_(5, 6); | ||||||
| 			DqnV2 d = DqnV2(7, 8); | 			DqnV2 d = DqnV2_(7, 8); | ||||||
| 
 | 
 | ||||||
| 			DQN_ASSERT(array.Init(16, memAPI)); | 			DQN_ASSERT(array.Init(16, memAPI)); | ||||||
| 			DQN_ASSERT(array.Remove(0) == false); | 			DQN_ASSERT(array.Remove(0) == false); | ||||||
| @ -1214,10 +1214,10 @@ void DqnArray_TestInternal(const DqnMemAPI memAPI) | |||||||
| 
 | 
 | ||||||
| 		if (1) | 		if (1) | ||||||
| 		{ | 		{ | ||||||
| 			DqnV2 a = DqnV2(1, 2); | 			DqnV2 a = DqnV2_(1, 2); | ||||||
| 			DqnV2 b = DqnV2(3, 4); | 			DqnV2 b = DqnV2_(3, 4); | ||||||
| 			DqnV2 c = DqnV2(5, 6); | 			DqnV2 c = DqnV2_(5, 6); | ||||||
| 			DqnV2 d = DqnV2(7, 8); | 			DqnV2 d = DqnV2_(7, 8); | ||||||
| 
 | 
 | ||||||
| 			DQN_ASSERT(array.Init(16, memAPI)); | 			DQN_ASSERT(array.Init(16, memAPI)); | ||||||
| 
 | 
 | ||||||
| @ -2277,152 +2277,251 @@ void DqnHashTable_Test() | |||||||
| 	LogSuccess("DqnHashTable()"); | 	LogSuccess("DqnHashTable()"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Dqn_BinarySearch_Test() | void Dqn_BSearch_Test() | ||||||
| { | { | ||||||
| 	LogHeader("Dqn_BinarySearch"); | 	LogHeader("Dqn_BSearch"); | ||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		auto compare = [](const u32 &a, const u32 &b) -> bool { | 		auto IsLessThan = [](const u32 &a, const u32 &b) -> bool { | ||||||
| 			bool result = a < b; | 			bool result = a < b; | ||||||
| 			return result; | 			return result; | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
|  | 		auto Equals = [](const u32 &a, const u32 &b) -> bool { | ||||||
|  | 			bool result = (a == b); | ||||||
|  | 			return result; | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 		u32 array[] = {1, 2, 3}; | 		u32 array[] = {1, 2, 3}; | ||||||
| 		i64 result = Dqn_BinarySearch<u32>(array, DQN_ARRAY_COUNT(array), 1, compare); | 		i64 result = Dqn_BSearch<u32>(array, DQN_ARRAY_COUNT(array), 1, Equals, IsLessThan); | ||||||
| 		DQN_ASSERT(result == 0); | 		DQN_ASSERT(result == 0); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch<u32>(array, DQN_ARRAY_COUNT(array), 2, compare); | 		result = Dqn_BSearch<u32>(array, DQN_ARRAY_COUNT(array), 2, Equals, IsLessThan); | ||||||
| 		DQN_ASSERT(result == 1); | 		DQN_ASSERT(result == 1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch<u32>(array, DQN_ARRAY_COUNT(array), 3, compare); | 		result = Dqn_BSearch<u32>(array, DQN_ARRAY_COUNT(array), 3, Equals, IsLessThan); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch<u32>(array, DQN_ARRAY_COUNT(array), 4, compare); | 		result = Dqn_BSearch<u32>(array, DQN_ARRAY_COUNT(array), 4, Equals, IsLessThan); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 		LogSuccess("Dqn_BinarySearch(): With odd sized array and custom compare"); | 		LogSuccess("Dqn_BSearch(): With odd sized array and custom compare"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		u32 array[] = {1, 2, 3, 4}; | 		i64 array[] = {1, 2, 3, 4}; | ||||||
| 		i64 result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 1); | 		i64 result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 1); | ||||||
| 		DQN_ASSERT(result == 0); | 		DQN_ASSERT(result == 0); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 2); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 2); | ||||||
| 		DQN_ASSERT(result == 1); | 		DQN_ASSERT(result == 1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 3); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 3); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 4); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 4); | ||||||
| 		DQN_ASSERT(result == 3); | 		DQN_ASSERT(result == 3); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 5); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 5); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 		LogSuccess("Dqn_BinarySearch(): With even sized array"); | 		LogSuccess("Dqn_BSearch(): With even sized array"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		i32 array[] = {1, 2, 3}; | 		i64 array[] = {1, 2, 3}; | ||||||
| 		i64 result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BinarySearchBound_Lower); | 		i64 result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 0); | 		DQN_ASSERT(result == 0); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 1); | 		DQN_ASSERT(result == 1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 		LogSuccess("Dqn_BinarySearch(): Lower bound with odd sized array"); | 		LogSuccess("Dqn_BSearch(): Lower bound with odd sized array"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		i32 array[] = {1, 2, 3, 4}; | 		i64 array[] = {1, 2, 3, 4}; | ||||||
| 
 | 
 | ||||||
| 		i64 result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BinarySearchBound_Lower); | 		i64 result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 0); | 		DQN_ASSERT(result == 0); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 1); | 		DQN_ASSERT(result == 1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 3); | 		DQN_ASSERT(result == 3); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 6, Dqn_BinarySearchBound_Lower); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 6, Dqn_BSearchBound_Lower); | ||||||
| 		DQN_ASSERT(result == 3); | 		DQN_ASSERT(result == 3); | ||||||
| 		LogSuccess("Dqn_BinarySearch(): Lower bound with even sized array"); | 		LogSuccess("Dqn_BSearch(): Lower bound with even sized array"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		i32 array[] = {1, 2, 3}; | 		i64 array[] = {1, 2, 3}; | ||||||
| 		i64 result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BinarySearchBound_Higher); | 		i64 result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 0); | 		DQN_ASSERT(result == 0); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 1); | 		DQN_ASSERT(result == 1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 		LogSuccess("Dqn_BinarySearch(): Higher bound with odd sized array"); | 		LogSuccess("Dqn_BSearch(): Higher bound with odd sized array"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (1) | 	if (1) | ||||||
| 	{ | 	{ | ||||||
| 		i32 array[] = {1, 2, 3, 4}; | 		i64 array[] = {1, 2, 3, 4}; | ||||||
| 
 | 
 | ||||||
| 		i64 result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BinarySearchBound_Higher); | 		i64 result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 0, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 0); | 		DQN_ASSERT(result == 0); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 1, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 1); | 		DQN_ASSERT(result == 1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 2, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 2); | 		DQN_ASSERT(result == 2); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 3, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == 3); | 		DQN_ASSERT(result == 3); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 4, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 5, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 
 | 
 | ||||||
| 		result = Dqn_BinarySearch(array, DQN_ARRAY_COUNT(array), 6, Dqn_BinarySearchBound_Higher); | 		result = Dqn_BSearch(array, DQN_ARRAY_COUNT(array), 6, Dqn_BSearchBound_Higher); | ||||||
| 		DQN_ASSERT(result == -1); | 		DQN_ASSERT(result == -1); | ||||||
| 		LogSuccess("Dqn_BinarySearch(): Higher bound with even sized array"); | 		LogSuccess("Dqn_BSearch(): Higher bound with even sized array"); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void DqnMemSet_Test() | ||||||
|  | { | ||||||
|  | 	LogHeader("DqnMemSet Test"); | ||||||
|  | 	DqnRndPCG rnd = DqnRndPCG_(); | ||||||
|  | 
 | ||||||
|  | 	const int NUM_TIMINGS = 5; | ||||||
|  | #if defined(DQN_WIN32_IMPLEMENTATION) | ||||||
|  | 	f64 timings[3][NUM_TIMINGS] = {}; | ||||||
|  | #else | ||||||
|  | 	f64 timings[2][NUM_TIMINGS] = {}; | ||||||
|  | #endif | ||||||
|  | 	f64 avgTimings[DQN_ARRAY_COUNT(timings)] = {}; | ||||||
|  | 	void *buffers[DQN_ARRAY_COUNT(timings)]  = {}; | ||||||
|  | 
 | ||||||
|  | 	const i32 NUM_ITERATIONS = DQN_ARRAY_COUNT(timings[0]); | ||||||
|  | 	for (auto i = 0; i < NUM_ITERATIONS; i++) | ||||||
|  | 	{ | ||||||
|  | 		i32 size = rnd.Range(DQN_MEGABYTE(16), DQN_MEGABYTE(32)); | ||||||
|  | 		u8 value = (u8)rnd.Range(0, 255); | ||||||
|  | 
 | ||||||
|  | 		printf("%04d:", i); | ||||||
|  | 
 | ||||||
|  | 		i32 timingsIndex = 0; | ||||||
|  | 		// DqnMem_Set
 | ||||||
|  | 		{ | ||||||
|  | 			buffers[timingsIndex] = malloc(size); DQN_ASSERT(buffers[timingsIndex]); | ||||||
|  | 
 | ||||||
|  | 			f64 start = DqnTimer_NowInMs(); | ||||||
|  | 			DqnMem_Set(buffers[timingsIndex], value, size); | ||||||
|  | 			f64 duration = DqnTimer_NowInMs() - start; | ||||||
|  | 
 | ||||||
|  | 			timings[timingsIndex++][i] = duration; | ||||||
|  | 			printf("DqnMem_Set: %8.3f vs ", duration); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | #if defined(DQN_WIN32_IMPLEMENTATION) | ||||||
|  | 		// DqnMem_Set64
 | ||||||
|  | 		{ | ||||||
|  | 			buffers[timingsIndex] = malloc(size); DQN_ASSERT(buffers[timingsIndex]); | ||||||
|  | 
 | ||||||
|  | 			f64 start = DqnTimer_NowInMs(); | ||||||
|  | 			DqnMem_Set64(buffers[timingsIndex], value, size); | ||||||
|  | 			f64 duration = DqnTimer_NowInMs() - start; | ||||||
|  | 
 | ||||||
|  | 			timings[timingsIndex++][i] = duration; | ||||||
|  | 			printf("DqnMem_Set: %8.3f vs ", duration); | ||||||
|  | 		} | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 		// crt memset
 | ||||||
|  | 		{ | ||||||
|  | 			buffers[timingsIndex] = malloc(size); DQN_ASSERT(buffers[timingsIndex]); | ||||||
|  | 
 | ||||||
|  | 			f64 start = DqnTimer_NowInMs(); | ||||||
|  | 			memset(buffers[timingsIndex], value, size); | ||||||
|  | 			f64 duration = DqnTimer_NowInMs() - start; | ||||||
|  | 
 | ||||||
|  | 			timings[timingsIndex++][i] = duration; | ||||||
|  | 			printf("memset: %8.3f\n", duration); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		for (auto testIndex = 0; testIndex < size; testIndex++) | ||||||
|  | 		{ | ||||||
|  | 			DQN_ASSERT(((u8 *)buffers[0])[testIndex] == ((u8 *)buffers[1])[testIndex]); | ||||||
|  | 			DQN_ASSERT(((u8 *)buffers[1])[testIndex] == ((u8 *)buffers[2])[testIndex]); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		for (auto bufferIndex = 0; bufferIndex < DQN_ARRAY_COUNT(buffers); bufferIndex++) | ||||||
|  | 		{ | ||||||
|  | 			free(buffers[bufferIndex]); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for (auto timingsIndex = 0; timingsIndex < DQN_ARRAY_COUNT(timings); timingsIndex++) | ||||||
|  | 	{ | ||||||
|  | 		f64 totalTime = 0; | ||||||
|  | 		for (auto iterationIndex = 0; iterationIndex < NUM_ITERATIONS; iterationIndex++) | ||||||
|  | 		{ | ||||||
|  | 			totalTime += timings[timingsIndex][iterationIndex]; | ||||||
|  | 		} | ||||||
|  | 		avgTimings[timingsIndex] = totalTime / (f64)NUM_ITERATIONS; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	printf("\n- Average Timings\n"); | ||||||
|  | #if defined(DQN_WIN32_IMPLEMENTATION) | ||||||
|  | 	printf("    DqnMem_Set: %f vs DqnMem_Set64: %f vs memset: %f\n", avgTimings[0], avgTimings[1], | ||||||
|  | 	       avgTimings[2]); | ||||||
|  | #else | ||||||
|  | 	printf("    DqnMem_Set: %f vs memset: %f\n", avgTimings[0], avgTimings[1]); | ||||||
|  | #endif | ||||||
|  | 	LogSuccess("DqnMem_Set(): Completed succesfully"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int main(void) | int main(void) | ||||||
| { | { | ||||||
| 	DqnString_Test(); | 	DqnString_Test(); | ||||||
| @ -2435,7 +2534,8 @@ int main(void) | |||||||
| 	DqnMemStack_Test(); | 	DqnMemStack_Test(); | ||||||
| 	DqnQuickSort_Test(); | 	DqnQuickSort_Test(); | ||||||
| 	DqnHashTable_Test(); | 	DqnHashTable_Test(); | ||||||
| 	Dqn_BinarySearch_Test(); | 	Dqn_BSearch_Test(); | ||||||
|  | 	DqnMemSet_Test(); | ||||||
| 
 | 
 | ||||||
| #ifdef DQN_XPLATFORM_LAYER | #ifdef DQN_XPLATFORM_LAYER | ||||||
| 	DqnFile_Test(); | 	DqnFile_Test(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user