/unmaintained/adsoda/adsoda-tests.factor

http://github.com/abeaumont/factor · Factor · 310 lines · 207 code · 56 blank · 47 comment · 4 complexity · 516205d585e134e39bf5af7cc40a4b13 MD5 · raw file

  1. USING: adsoda
  2. kernel
  3. math
  4. accessors
  5. sequences
  6. adsoda.solution2
  7. fry
  8. tools.test
  9. arrays ;
  10. IN: adsoda.tests
  11. : s1 ( -- solid )
  12. <solid>
  13. 2 >>dimension
  14. "s1" >>name
  15. { 1 1 1 } >>color
  16. { 1 -1 -5 } cut-solid
  17. { -1 -1 -21 } cut-solid
  18. { -1 0 -12 } cut-solid
  19. { 1 2 16 } cut-solid
  20. ;
  21. : solid1 ( -- solid )
  22. <solid>
  23. 2 >>dimension
  24. "solid1" >>name
  25. { 1 -1 -5 } cut-solid
  26. { -1 -1 -21 } cut-solid
  27. { -1 0 -12 } cut-solid
  28. { 1 2 16 } cut-solid
  29. ensure-adjacencies
  30. ;
  31. : solid2 ( -- solid )
  32. <solid>
  33. 2 >>dimension
  34. "solid2" >>name
  35. { -1 1 -10 } cut-solid
  36. { -1 -1 -28 } cut-solid
  37. { 1 0 13 } cut-solid
  38. ! { 1 2 16 } cut-solid
  39. ensure-adjacencies
  40. ;
  41. : solid3 ( -- solid )
  42. <solid>
  43. 2 >>dimension
  44. "solid3" >>name
  45. { 1 1 1 } >>color
  46. { 1 0 16 } cut-solid
  47. { -1 0 -36 } cut-solid
  48. { 0 1 1 } cut-solid
  49. { 0 -1 -17 } cut-solid
  50. ! { 1 2 16 } cut-solid
  51. ensure-adjacencies
  52. ;
  53. : solid4 ( -- solid )
  54. <solid>
  55. 2 >>dimension
  56. "solid4" >>name
  57. { 1 1 1 } >>color
  58. { 1 0 21 } cut-solid
  59. { -1 0 -36 } cut-solid
  60. { 0 1 1 } cut-solid
  61. { 0 -1 -17 } cut-solid
  62. ensure-adjacencies
  63. ;
  64. : solid5 ( -- solid )
  65. <solid>
  66. 2 >>dimension
  67. "solid5" >>name
  68. { 1 1 1 } >>color
  69. { 1 0 6 } cut-solid
  70. { -1 0 -17 } cut-solid
  71. { 0 1 17 } cut-solid
  72. { 0 -1 -19 } cut-solid
  73. ensure-adjacencies
  74. ;
  75. : solid7 ( -- solid )
  76. <solid>
  77. 2 >>dimension
  78. "solid7" >>name
  79. { 1 1 1 } >>color
  80. { 1 0 38 } cut-solid
  81. { 1 -5 -66 } cut-solid
  82. { -2 1 -75 } cut-solid
  83. ensure-adjacencies
  84. ;
  85. : solid6s ( -- seq )
  86. solid3 clone solid2 clone subtract
  87. ;
  88. : space1 ( -- space )
  89. <space>
  90. 2 >>dimension
  91. ! solid3 suffix-solids
  92. solid1 suffix-solids
  93. solid2 suffix-solids
  94. ! solid6s [ suffix-solids ] each
  95. solid4 suffix-solids
  96. ! solid5 suffix-solids
  97. solid7 suffix-solids
  98. { 1 1 1 } >>ambient-color
  99. <light>
  100. { -100 -100 } >>position
  101. { 0.2 0.7 0.1 } >>color
  102. suffix-lights
  103. ;
  104. : space2 ( -- space )
  105. <space>
  106. 4 >>dimension
  107. ! 4cube suffix-solids
  108. { 1 1 1 } >>ambient-color
  109. <light>
  110. { -100 -100 } >>position
  111. { 0.2 0.7 0.1 } >>color
  112. suffix-lights
  113. ;
  114. ! {
  115. ! { 1 0 0 0 }
  116. ! { 0 1 0 0 }
  117. ! { 0 0 0.984807753012208 -0.1736481776669303 }
  118. ! { 0 0 0.1736481776669303 0.984807753012208 }
  119. ! }
  120. ! ------------------------------------------------------------
  121. ! constant+
  122. [ { 1 2 5 } ] [ { 1 2 3 } 2 constant+ ] unit-test
  123. ! ------------------------------------------------------------
  124. ! translate
  125. [ { 1 -1 0 } ] [ { 1 -1 -5 } { 3 -2 } translate ] unit-test
  126. ! ------------------------------------------------------------
  127. ! transform
  128. [ { -1 -1 -5 21.0 } ] [ { -1 -1 -5 21 }
  129. { { 1 0 0 }
  130. { 0 1 0 }
  131. { 0 0 1 }
  132. } transform
  133. ] unit-test
  134. ! ------------------------------------------------------------
  135. ! compare-nleft-to-identity-matrix
  136. [ t ] [
  137. {
  138. { 1 0 0 1232 }
  139. { 0 1 0 0 321 }
  140. { 0 0 1 0 } }
  141. 3 compare-nleft-to-identity-matrix
  142. ] unit-test
  143. [ f ] [
  144. { { 1 0 0 } { 0 1 0 } { 0 0 0 } }
  145. 3 compare-nleft-to-identity-matrix
  146. ] unit-test
  147. [ f ] [
  148. { { 2 0 0 } { 0 1 0 } { 0 0 1 } }
  149. 3 compare-nleft-to-identity-matrix
  150. ] unit-test
  151. ! ------------------------------------------------------------
  152. [ t ] [
  153. { { 1 0 0 }
  154. { 0 1 0 }
  155. { 0 0 1 } } 3 valid-solution?
  156. ] unit-test
  157. [ f ] [
  158. { { 1 0 0 1 }
  159. { 0 0 0 1 }
  160. { 0 0 1 0 } } 3 valid-solution?
  161. ] unit-test
  162. [ f ] [
  163. { { 1 0 0 1 }
  164. { 0 0 0 1 } } 3 valid-solution?
  165. ] unit-test
  166. [ f ] [
  167. { { 1 0 0 1 }
  168. { 0 0 0 1 }
  169. { 0 0 1 0 } } 2 valid-solution?
  170. ] unit-test
  171. ! ------------------------------------------------------------
  172. [ 3 ] [ { 1 2 3 } last ] unit-test
  173. [ { 1 2 5 } ] [ { 1 2 3 } dup [ 2 + ] change-last ] unit-test
  174. ! ------------------------------------------------------------
  175. ! position-point
  176. [ 0 ] [
  177. { 1 -1 -5 } { 2 7 } position-point
  178. ] unit-test
  179. ! ------------------------------------------------------------
  180. ! transform
  181. ! TODO construire un exemple
  182. ! ------------------------------------------------------------
  183. ! slice-solid
  184. ! ------------------------------------------------------------
  185. ! solve-equation
  186. ! deux cas de tests, avec solution et sans solution
  187. [ { 2 7 } ]
  188. [ { { 1 -1 -5 } { 1 2 16 } } intersect-hyperplanes ]
  189. unit-test
  190. [ f ]
  191. [ { { 1 -1 -5 } { 1 2 16 } { -1 -1 -21 } } intersect-hyperplanes ]
  192. unit-test
  193. [ f ]
  194. [ { { 1 0 -5 } { 1 0 16 } } intersect-hyperplanes ]
  195. unit-test
  196. ! ------------------------------------------------------------
  197. ! point-inside-halfspace
  198. [ t ] [ { 1 -1 -5 } { 0 0 } point-inside-halfspace? ]
  199. unit-test
  200. [ f ] [ { 1 -1 -5 } { 8 13 } point-inside-halfspace? ]
  201. unit-test
  202. [ t ] [ { 1 -1 -5 } { 8 13 } point-inside-or-on-halfspace? ]
  203. unit-test
  204. ! ------------------------------
  205. ! order solid
  206. [ 1 ] [ 0 >pv solid1 solid2 order-solid ] unit-test
  207. [ -1 ] [ 0 >pv solid2 solid1 order-solid ] unit-test
  208. [ f ] [ 1 >pv solid1 solid2 order-solid ] unit-test
  209. [ f ] [ 1 >pv solid2 solid1 order-solid ] unit-test
  210. ! clip-solid
  211. [ { { 13 15 } { 15 13 } { 13 13 } } ]
  212. [ 0 >pv solid2 solid1 clip-solid first corners>> ] unit-test
  213. solid1 corners>> '[ _ ]
  214. [ 0 >pv solid1 solid1 clip-solid first corners>> ] unit-test
  215. solid1 corners>> '[ _ ]
  216. [ 0 >pv solid1 solid2 clip-solid first corners>> ] unit-test
  217. solid1 corners>> '[ _ ]
  218. [ 1 >pv solid1 solid2 clip-solid first corners>> ] unit-test
  219. solid2 corners>> '[ _ ]
  220. [ 1 >pv solid2 solid1 clip-solid first corners>> ] unit-test
  221. !
  222. [
  223. {
  224. { { 13 15 } { 15 13 } { 13 13 } }
  225. { { 16 17 } { 16 13 } { 36 17 } { 36 13 } }
  226. { { 16 1 } { 16 2 } { 36 1 } { 36 2 } }
  227. }
  228. ] [ 0 >pv solid2 solid3 2array
  229. solid1 (solids-silhouette-subtract)
  230. [ corners>> ] map
  231. ] unit-test
  232. [
  233. {
  234. { { 8 13 } { 2 7 } { 12 9 } { 12 2 } }
  235. { { 13 15 } { 15 13 } { 13 13 } }
  236. { { 16 17 } { 16 15 } { 36 17 } { 36 15 } }
  237. { { 16 1 } { 16 2 } { 36 1 } { 36 2 } }
  238. }
  239. ] [
  240. 0 >pv <space> solid1 suffix-solids
  241. solid2 suffix-solids
  242. solid3 suffix-solids
  243. remove-hidden-solids
  244. solids>> [ corners>> ] map
  245. ] unit-test
  246. ! { }
  247. ! { }
  248. ! <light> { 0.2 0.3 0.4 } >>color { 1 -1 1 } >>direction suffix
  249. ! <light> { 0.4 0.3 0.1 } >>color { -1 -1 -1 } >>direction suffix
  250. ! suffix
  251. ! { 0.1 0.1 0.1 } suffix ! ambient color
  252. ! { 0.23 0.32 0.17 } suffix ! solid color
  253. ! solid3 faces>> first
  254. ! enlight-projection