def setUp(self): magnet1 = MagnetModel(0.1, 0.6, 0.8) magnet2 = MagnetModel(1.1, -0.3, 1.8) magnet3 = MagnetModel(-0.1, 0.45, -0.4) self.magnets = [magnet1, magnet2, magnet3] self.plane_distance = 0.25 self.friction = 0.3 self.gravity_pullback = 0.5 self.pendulum = PendulumModel(self.friction, self.gravity_pullback, self.plane_distance) self.pendulum.magnets = self.magnets
def setUp(self): magnet1 = MagnetModel(1.0, 0.0, 1.5) magnet2 = MagnetModel(-1.0, 1.0, 1.5) magnet3 = MagnetModel(-1.0, -1.0, 1.5) magnet4 = MagnetModel(0.0, 0.0, 0.5) self.magnets = [magnet1, magnet2, magnet3, magnet4] self.plane_distance = 0.25 self.friction = 0.3 self.gravity_pullback = 0.5 self.pendulum = PendulumModel(self.friction, self.gravity_pullback, self.plane_distance) self.pendulum.magnets = self.magnets self.time_step = 0.01 self.integrator = EulerIntegrator(self.time_step) self.r = 255 self.g = 0 self.b = 0 self.image_generator = BasicImageGenerator(self.r, self.g, self.b) self.size = 5 self.resolution = 640 self.basins_generator = BasinsGenerator(self.size, self.resolution) self.basins_generator.pendulum_model = self.pendulum self.basins_generator.integrator = self.integrator self.basins_generator.image_generator = self.image_generator
class TestPendulumModel(unittest.TestCase): def setUp(self): magnet1 = MagnetModel(0.1, 0.6, 0.8) magnet2 = MagnetModel(1.1, -0.3, 1.8) magnet3 = MagnetModel(-0.1, 0.45, -0.4) self.magnets = [magnet1, magnet2, magnet3] self.plane_distance = 0.25 self.friction = 0.3 self.gravity_pullback = 0.5 self.pendulum = PendulumModel(self.friction, self.gravity_pullback, self.plane_distance) self.pendulum.magnets = self.magnets def test_pendulum_model_initalization(self): self.assertEqual(self.pendulum.friction, self.friction) self.assertEqual(self.pendulum.gravity_pullback, self.gravity_pullback) self.assertEqual(self.pendulum.plane_distance, self.plane_distance) self.assertEqual(len(self.pendulum.magnets), len(self.magnets)) def test_prepare_gpu_source(self): self.pendulum.prepare_gpu_source() gpu_source = """ __device__ inline void diff_eq(float &ax, float &ay, float &x, float &y, float &vx, float &vy) { const float kf = 0.3f; const float kg = 0.5f; const float d2 = 0.25f * 0.25f; const int n = 3; const float xm[n] = {0.1f, 1.1f, -0.1f}; const float ym[n] = {0.6f, -0.3f, 0.45f}; const float km[n] = {0.8f, 1.8f, -0.4f}; float amx = 0.0f; float amy = 0.0f; for (int i = 0 ; i < n ; i++) { float deltaX = xm[i] - x; float deltaY = ym[i] - y; float dist = sqrtf(deltaX * deltaX + deltaY * deltaY + d2); float distPow3 = dist * dist * dist; amx += km[i] * deltaX / distPow3; amy += km[i] * deltaY / distPow3; } ax = -kf * vx - kg * x + amx; ay = -kf * vy - kg * y + amy; } __device__ int determineMagnet(float &x, float &y, float delta) { bool m0dx = ((0.1f - delta) <= x) && (x <= (0.1f + delta)); bool m0dy = ((0.6f - delta) <= y) && (y <= (0.6f + delta)); if (m0dx && m0dy) { return 0; } bool m1dx = ((1.1f - delta) <= x) && (x <= (1.1f + delta)); bool m1dy = ((-0.3f - delta) <= y) && (y <= (-0.3f + delta)); if (m1dx && m1dy) { return 1; } bool m2dx = ((-0.1f - delta) <= x) && (x <= (-0.1f + delta)); bool m2dy = ((0.45f - delta) <= y) && (y <= (0.45f + delta)); if (m2dx && m2dy) { return 2; } return -1; } """ gpu_source = "".join(gpu_source.split()) pendulum_gpu_source = "".join(self.pendulum.gpu_source.split()) self.assertEqual(pendulum_gpu_source, gpu_source)