def testMath(self): """Test the math functions. """ self.assertEqual(math.pi, sl.PI) self.assertEqual(0.3, sl.abs(-0.3)) self.assertEqual(math.acos(0.2), sl.acos(0.2)) self.assertEqual(math.asin(0.2), sl.asin(0.2)) self.assertEqual(math.atan(0.2), sl.atan(0.2)) self.assertEqual(math.atan2(0.2, 0.5), sl.atan(0.2, 0.5)) self.assertEqual(2, sl.ceil(1.3)) self.assertEqual(0.3, sl.clamp(0.3, 0.0, 1.0)) self.assertEqual(0.0, sl.clamp(-0.1, 0.0, 1.0)) self.assertEqual(1.0, sl.clamp(1.5, 0.0, 1.0)) self.assertEqual(math.cos(0.2), sl.cos(0.2)) self.assertEqual(math.exp(0.2), sl.exp(0.2)) self.assertEqual(math.degrees(0.3), sl.degrees(0.3)) self.assertEqual(1.0, sl.floor(1.8)) self.assertEqual(1.0 / math.sqrt(5), sl.inversesqrt(5)) self.assertEqual(math.log(8), sl.log(8)) self.assertEqual(math.log(8, 2), sl.log(8, 2)) self.assertEqual(5, sl.max(1, 5, 3)) self.assertEqual(1, sl.min(1, 5, 3)) self.assertEqual(0.5, sl.mix(0.0, 1.0, 0.5)) self.assertEqual(0.5, sl.mod(2.5, 1)) self.assertEqual(16, sl.pow(4, 2)) self.assertEqual(math.radians(45), sl.radians(45)) self.assertEqual(2.0, sl.round(2.4)) self.assertEqual(-1, sl.sign(-18)) self.assertEqual(1, sl.sign(18)) self.assertEqual(0, sl.sign(0)) self.assertEqual(math.sin(0.2), sl.sin(0.2)) self.assertEqual(0.5, sl.smoothstep(0.0, 1.0, 0.5)) self.assertEqual(0.5, sl.spline(0.5, [0.0, 0.0, 1.0, 1.0])) self.assertEqual(4, sl.sqrt(16)) self.assertEqual(0, sl.step(1.0, 0.5)) self.assertEqual(1, sl.step(1.0, 1.5)) self.assertEqual(math.tan(0.2), sl.tan(0.2)) # For now, just make sure the functions can be called sl.color_cellnoise(0.3, 0.2) sl.color_noise(0.1, 0.3) sl.color_pnoise(0.1, 0.3, 2, 2) sl.color_random() sl.float_cellnoise(0.3, 0.2) sl.float_noise(0.1, 0.3) sl.float_pnoise(0.1, 0.3, 2, 2) sl.float_random() sl.point_cellnoise(0.3, 0.2) sl.point_noise(0.1, 0.3) sl.point_pnoise(0.1, 0.3, 2, 2) sl.point_random() sl.vector_cellnoise(0.3, 0.2) sl.vector_noise(0.1, 0.3) sl.vector_pnoise(0.1, 0.3, 2, 2)
def testMath(self): """Test the math functions. """ self.assertEqual(math.pi, sl.PI) self.assertEqual(0.3, sl.abs(-0.3)) self.assertEqual(math.acos(0.2), sl.acos(0.2)) self.assertEqual(math.asin(0.2), sl.asin(0.2)) self.assertEqual(math.atan(0.2), sl.atan(0.2)) self.assertEqual(math.atan2(0.2, 0.5), sl.atan(0.2, 0.5)) self.assertEqual(2, sl.ceil(1.3)) self.assertEqual(0.3, sl.clamp(0.3, 0.0, 1.0)) self.assertEqual(0.0, sl.clamp(-0.1, 0.0, 1.0)) self.assertEqual(1.0, sl.clamp(1.5, 0.0, 1.0)) self.assertEqual(math.cos(0.2), sl.cos(0.2)) self.assertEqual(math.exp(0.2), sl.exp(0.2)) self.assertEqual(math.degrees(0.3), sl.degrees(0.3)) self.assertEqual(1.0, sl.floor(1.8)) self.assertEqual(1.0/math.sqrt(5), sl.inversesqrt(5)) self.assertEqual(math.log(8), sl.log(8)) self.assertEqual(math.log(8, 2), sl.log(8, 2)) self.assertEqual(5, sl.max(1, 5, 3)) self.assertEqual(1, sl.min(1, 5, 3)) self.assertEqual(0.5, sl.mix(0.0, 1.0, 0.5)) self.assertEqual(0.5, sl.mod(2.5, 1)) self.assertEqual(16, sl.pow(4, 2)) self.assertEqual(math.radians(45), sl.radians(45)) self.assertEqual(2.0, sl.round(2.4)) self.assertEqual(-1, sl.sign(-18)) self.assertEqual(1, sl.sign(18)) self.assertEqual(0, sl.sign(0)) self.assertEqual(math.sin(0.2), sl.sin(0.2)) self.assertEqual(0.5, sl.smoothstep(0.0, 1.0, 0.5)) self.assertEqual(0.5, sl.spline(0.5, [0.0, 0.0, 1.0, 1.0])) self.assertEqual(4, sl.sqrt(16)) self.assertEqual(0, sl.step(1.0, 0.5)) self.assertEqual(1, sl.step(1.0, 1.5)) self.assertEqual(math.tan(0.2), sl.tan(0.2)) # For now, just make sure the functions can be called sl.color_cellnoise(0.3,0.2) sl.color_noise(0.1,0.3) sl.color_pnoise(0.1,0.3, 2, 2) sl.color_random() sl.float_cellnoise(0.3,0.2) sl.float_noise(0.1,0.3) sl.float_pnoise(0.1,0.3, 2, 2) sl.float_random() sl.point_cellnoise(0.3,0.2) sl.point_noise(0.1,0.3) sl.point_pnoise(0.1,0.3, 2, 2) sl.point_random() sl.vector_cellnoise(0.3,0.2) sl.vector_noise(0.1,0.3) sl.vector_pnoise(0.1,0.3, 2, 2)
def testEuler(self): """Test the fromEuler*() and toEuler*() methods. The result from an fromEuler*() method is compared to an equivalent matrix that is composed by 3 individual rotations. """ angles = [ { "X": radians(20), "Y": radians(30), "Z": radians(40) }, { "X": radians(0), "Y": radians(0), "Z": radians(0) }, { "X": radians(350), "Y": radians(0), "Z": radians(0) }, { "X": radians(0), "Y": radians(350), "Z": radians(0) }, { "X": radians(0), "Y": radians(0), "Z": radians(350) }, ] axis = {"X": vec3(1, 0, 0), "Y": vec3(0, 1, 0), "Z": vec3(0, 0, 1)} for order in ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]: for angle in angles: R1 = mat3.rotation(angle[order[0]], axis[order[0]]) R2 = mat3.rotation(angle[order[1]], axis[order[1]]) R3 = mat3.rotation(angle[order[2]], axis[order[2]]) # Each rotation is about the *global* axis, so these rotations # have to be applied just in the opposite order than mentioned # in the fromEuler*() method name. C = R1 * R2 * R3 exec('E = mat3.fromEuler%s(angle["X"], angle["Y"], angle["Z"])' % order) self.assertEqual(E, C) exec('x,y,z = E.toEuler%s()' % order) exec('E2 = mat3.fromEuler%s(x, y, z)' % order) if E2 != E: # print E # print E2 msg = "The matrix E2 generated from the toEuler() angles doesn't match the original matrix E.\n" msg += "Original angles: (%s, %s, %s), toEuler angles: (%s, %s, %s)" % ( degrees(angle["X"]), degrees( angle["Y"]), degrees(angle["Z"]), degrees(x), degrees(y), degrees(z)) self.fail(msg)
def testEuler(self): """Test the fromEuler*() and toEuler*() methods. The result from an fromEuler*() method is compared to an equivalent matrix that is composed by 3 individual rotations. """ angles = [ {"X": radians(20), "Y": radians(30), "Z": radians(40)}, {"X": radians(0), "Y": radians(0), "Z": radians(0)}, {"X": radians(350), "Y": radians(0), "Z": radians(0)}, {"X": radians(0), "Y": radians(350), "Z": radians(0)}, {"X": radians(0), "Y": radians(0), "Z": radians(350)}, ] axis = {"X": vec3(1, 0, 0), "Y": vec3(0, 1, 0), "Z": vec3(0, 0, 1)} for order in ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]: for angle in angles: R1 = mat3.rotation(angle[order[0]], axis[order[0]]) R2 = mat3.rotation(angle[order[1]], axis[order[1]]) R3 = mat3.rotation(angle[order[2]], axis[order[2]]) # Each rotation is about the *global* axis, so these rotations # have to be applied just in the opposite order than mentioned # in the fromEuler*() method name. C = R1 * R2 * R3 exec('E = mat3.fromEuler%s(angle["X"], angle["Y"], angle["Z"])' % order) self.assertEqual(E, C) exec("x,y,z = E.toEuler%s()" % order) exec("E2 = mat3.fromEuler%s(x, y, z)" % order) if E2 != E: # print E # print E2 msg = "The matrix E2 generated from the toEuler() angles doesn't match the original matrix E.\n" msg += "Original angles: (%s, %s, %s), toEuler angles: (%s, %s, %s)" % ( degrees(angle["X"]), degrees(angle["Y"]), degrees(angle["Z"]), degrees(x), degrees(y), degrees(z), ) self.fail(msg)