v / examples / pendulum-simulation / modules / sim / sim_test.v
62 lines · 57 sloc · 1.66 KB · acf6b344f733169ec6ecc9881f8a8c2c795b9883
Raw
1module sim
2
3const sim_test_mock_params = SimParams{
4 rope_length: 0.25
5 bearing_mass: 0.03
6 magnet_spacing: 0.05
7 magnet_height: 0.03
8 magnet_strength: 10
9 gravity: 4.9
10}
11const sim_test_mock_state = SimState{
12 position: vector(
13 x: -0.016957230930171364
14 y: -0.02937078552673521
15 z: 0.002311063475327252
16 )
17 velocity: vector(
18 x: -7.251158929833104
19 y: -12.559375680227724
20 z: -105.91539687686381
21 )
22 accel: vector(
23 x: -8.337034766251843e-11
24 y: -2.842170943040401e-10
25 z: 1.2126596023639044e-10
26 )
27}
28
29pub fn test_satisfy_rope_constraint() {
30 mut state := SimState{
31 ...sim_test_mock_state
32 }
33
34 state.satisfy_rope_constraint(sim_test_mock_params)
35 assert state.position.x == -0.016957230930171364
36 assert state.position.y == -0.02937078552673521
37 assert state.position.z == 0.002311063475327252
38 assert state.velocity.x == -7.251158929833104
39 assert state.velocity.y == -12.559375680227724
40 assert state.velocity.z == -105.91539687686381
41 assert state.accel.x == -8.337034766251843e-11
42 assert state.accel.y == -2.842170943040401e-10
43 assert state.accel.z == 1.2126596023639044e-10
44}
45
46pub fn test_increment() {
47 mut state := SimState{
48 ...sim_test_mock_state
49 }
50
51 delta_t := 0.0005
52 state.increment(delta_t, sim_test_mock_params)
53 assert state.position.x == -0.016957230930171364
54 assert state.position.y == -0.02937078552673524
55 assert state.position.z == 0.0023110634753272796
56 assert state.velocity.x == -7.251158929833047
57 assert state.velocity.y == -12.559375680227637
58 assert state.velocity.z == -105.9153968768638
59 assert state.accel.x == 1.1368683772161604e-10
60 assert state.accel.y == 1.7431981783981126e-10
61 assert state.accel.z == 3.031649005909761e-11
62}
63