PageRenderTime 36ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/test/test_segments.rb

https://github.com/guerilla-di/flame_channel_parser
Ruby | 273 lines | 270 code | 3 blank | 0 comment | 0 complexity | 2b847b88c568e4b47fd605a83f76f198 MD5 | raw file
  1. require "helper"
  2. include FlameChannelParser::Segments
  3. class TestConstantFunction < Test::Unit::TestCase
  4. D = 0.001
  5. def test_segment
  6. seg = ConstantFunction.new(123.4)
  7. assert seg.defines?(-1), "The segment should define this frame"
  8. assert seg.defines?(4567), "The segment should define this frame"
  9. assert_equal 123.4, seg.value_at(123), "This is the segment's constant value"
  10. end
  11. end
  12. class TestConstantSegment < Test::Unit::TestCase
  13. D = 0.001
  14. def test_segment
  15. seg = ConstantSegment.new(12, 25, 2.5)
  16. assert !seg.defines?(11), "This frame is outside the segment"
  17. assert !seg.defines?(26), "This frame is outside the segment"
  18. assert seg.defines?(12), "Frame 12 defined"
  19. assert seg.defines?(24), "Frame 24 defined"
  20. assert_equal 2.5, seg.value_at(11)
  21. assert_equal 2.5, seg.value_at(14)
  22. assert_equal 2.5, seg.value_at(26)
  23. end
  24. end
  25. class TestBezierSegment < Test::Unit::TestCase
  26. D = 0.001
  27. def test_segment
  28. seg = BezierSegment.new(
  29. frame_from = 117,
  30. frame_to = 149,
  31. value_from = 1.23907006,
  32. value_to = 258.239014,
  33. handle_left_x = 117.25,
  34. handle_left_y = 4.76008224,
  35. handle_right_x = 138.333328,
  36. handle_right_y = 258.398254
  37. )
  38. assert seg.defines?(117)
  39. assert !seg.defines?(149)
  40. assert !seg.defines?(151)
  41. assert !seg.defines?(116)
  42. assert_in_delta 1.23907006, seg.value_at(25), D
  43. assert_in_delta 24.7679917574603, seg.value_at(119), D
  44. end
  45. end
  46. class TestLinearSegment < Test::Unit::TestCase
  47. D = 0.001
  48. def test_segment
  49. seg = LinearSegment.new(12, 25, 2.5, 4.5)
  50. assert !seg.defines?(11), "This frame is outside the segment"
  51. assert !seg.defines?(26), "This frame is outside the segment"
  52. assert seg.defines?(12), "Frame 12 defined"
  53. assert seg.defines?(24), "Frame 24 defined"
  54. assert_in_delta 2.8076, seg.value_at(14), D
  55. assert_in_delta 2.9615, seg.value_at(15), D
  56. end
  57. end
  58. class TestConstantPrepolate < Test::Unit::TestCase
  59. def test_segment
  60. seg = ConstantPrepolate.new(12, 234.5)
  61. assert seg.defines?(11)
  62. assert !seg.defines?(12)
  63. assert !seg.defines?(13)
  64. assert seg.defines?(-1234)
  65. assert_equal 234.5, seg.value_at(12)
  66. end
  67. end
  68. class TestHermiteSegment < Test::Unit::TestCase
  69. D = 0.001
  70. def test_last_curve_segment
  71. refdata = %w(
  72. 258.239
  73. 257.937
  74. 257.074
  75. 255.674
  76. 253.759
  77. 251.352
  78. 248.476
  79. 245.152
  80. 241.405
  81. 237.255
  82. 232.727
  83. 227.842
  84. 222.624
  85. 217.094
  86. 211.276
  87. 205.192
  88. 198.865
  89. 192.317
  90. 185.571
  91. 178.65
  92. 171.576
  93. 164.372
  94. 157.06
  95. 149.664
  96. 142.205
  97. 134.707
  98. 127.192
  99. 119.683
  100. 112.202
  101. 104.772
  102. 97.4151
  103. 90.1547
  104. 83.0132
  105. 76.0132
  106. 69.1772
  107. 62.528
  108. 56.0881
  109. 49.8802
  110. 43.9269
  111. 38.2508
  112. 32.8746
  113. 27.8209
  114. 23.1124
  115. 18.7715
  116. 14.8212
  117. 11.2838
  118. 8.18198
  119. 5.53853
  120. 3.37598
  121. 1.71692
  122. 0.584045
  123. 0.0
  124. ).map{|e| e.to_f }
  125. herm = HermiteSegment.new(
  126. time_from = 149,
  127. time_to = 200,
  128. value1 = 258.239,
  129. value2 = 0,
  130. tangent1 = -0.0149286,
  131. tangent2 = -0.302127
  132. )
  133. interpolated = (149..200).map(&herm.method(:value_at))
  134. refdata.zip(interpolated).each do | ref, actual |
  135. assert_in_delta ref, actual, D, "Interpolated value should be in delta"
  136. end
  137. end
  138. def test_first_curve_segment
  139. refdata = %w(
  140. 222.919
  141. 222.543
  142. 221.735
  143. 220.506
  144. 218.867
  145. 216.83
  146. 214.406
  147. 211.608
  148. 208.445
  149. 204.931
  150. 201.075
  151. 196.89
  152. 192.387
  153. 187.578
  154. 182.473
  155. 177.085
  156. 171.425
  157. 165.503
  158. 159.333
  159. 152.924
  160. 146.29
  161. 139.44
  162. 132.386
  163. 125.141
  164. 117.715
  165. 110.119
  166. 102.366
  167. 94.4661
  168. 86.4316
  169. 78.2735
  170. 70.0034
  171. 61.6327
  172. 53.1728
  173. 44.6353
  174. 36.0314
  175. 27.3727
  176. 18.6705
  177. 9.93645
  178. 1.18185
  179. -7.58185
  180. -16.3432
  181. -25.0907
  182. -33.813
  183. -42.4985
  184. -51.136
  185. -59.714
  186. -68.2209
  187. -76.6454
  188. -84.9759
  189. -93.2012
  190. -101.31
  191. -109.29
  192. -117.131
  193. -124.82
  194. -132.347
  195. -139.7
  196. -146.868
  197. -153.839
  198. -160.601
  199. -167.144
  200. -173.456
  201. -179.525
  202. -185.34
  203. -190.889
  204. -196.162
  205. -201.146
  206. -205.83
  207. -210.204
  208. -214.254
  209. -217.97
  210. -221.341
  211. -224.355
  212. -227.0
  213. ).map{|e| e.to_f }
  214. herm = HermiteSegment.new(
  215. time_from = 22,
  216. time_to = 94,
  217. value1 = 222.919,
  218. value2 = -227.0,
  219. tangent1 = -0.156017,
  220. tangent2 = -2.45723
  221. )
  222. interpolated = (22..94).map(&herm.method(:value_at))
  223. (22..94).to_a.zip(refdata, interpolated).each do | frame, ref, actual |
  224. assert_in_delta ref, actual, D, "At #{frame} Interpolated value should be in delta"
  225. end
  226. end
  227. end
  228. class TestLinearPrepolate < Test::Unit::TestCase
  229. def test_segment
  230. seg = LinearPrepolate.new(123, -4, 2)
  231. assert seg.defines?(122)
  232. assert seg.defines?(-99999)
  233. assert_equal( -2, seg.value_at(124))
  234. assert_equal( -52, seg.value_at(99))
  235. end
  236. end
  237. class TestLinearExtrapolate < Test::Unit::TestCase
  238. def test_segment
  239. seg = LinearExtrapolate.new(123, -4, 2)
  240. assert seg.defines?(123)
  241. assert seg.defines?(9999999999)
  242. assert !seg.defines?(122)
  243. assert_equal( -2, seg.value_at(124))
  244. assert_equal 198, seg.value_at(224)
  245. end
  246. end