Clean up some duplication
[factor/jcg.git] / extra / adsoda / adsoda-tests.factor
blobf8881dfebb4f6b1dec6eaae1090b24c07b9ee44c
1 USING: adsoda\r
2 kernel\r
3 math\r
4 accessors\r
5 sequences\r
6     adsoda.solution2\r
7     fry\r
8     tools.test \r
9     arrays ;\r
11 IN: adsoda.tests\r
15 : s1 ( -- solid )\r
16     <solid> \r
17     2 >>dimension\r
18     "s1" >>name\r
19     { 1 1 1 } >>color\r
20     { 1 -1 -5 } cut-solid \r
21     { -1 -1 -21 } cut-solid \r
22     { -1 0 -12 } cut-solid \r
23     { 1 2 16 } cut-solid\r
24 ;\r
25 : solid1 ( -- solid )\r
26     <solid> \r
27     2 >>dimension\r
28     "solid1" >>name\r
29     { 1 -1 -5 } cut-solid \r
30     { -1 -1 -21 } cut-solid \r
31     { -1 0 -12 } cut-solid \r
32     { 1 2 16 } cut-solid\r
33     ensure-adjacencies\r
34     \r
35 ;\r
36 : solid2 ( -- solid )\r
37     <solid> \r
38     2 >>dimension\r
39     "solid2" >>name\r
40     { -1 1 -10 } cut-solid \r
41     { -1 -1 -28 } cut-solid \r
42     { 1 0 13 } cut-solid \r
43  !   { 1 2 16 } cut-solid\r
44     ensure-adjacencies\r
45     \r
46 ;\r
48 : solid3 ( -- solid )\r
49       <solid> \r
50     2 >>dimension\r
51     "solid3" >>name\r
52     { 1 1 1 } >>color\r
53     { 1 0 16 } cut-solid \r
54     { -1 0 -36 } cut-solid \r
55     { 0 1 1 } cut-solid \r
56     { 0 -1  -17 } cut-solid \r
57  !   { 1 2 16 } cut-solid\r
58     ensure-adjacencies\r
59     \r
61 ;\r
63 : solid4 ( -- solid )\r
64       <solid> \r
65     2 >>dimension\r
66     "solid4" >>name\r
67     { 1 1 1 } >>color\r
68     { 1 0 21 } cut-solid \r
69     { -1 0 -36 } cut-solid \r
70     { 0 1 1 } cut-solid \r
71     { 0 -1  -17 } cut-solid \r
72     ensure-adjacencies\r
73     \r
74 ;\r
76 : solid5 ( -- solid )\r
77       <solid> \r
78     2 >>dimension\r
79     "solid5" >>name\r
80     { 1 1 1 } >>color\r
81     { 1 0 6 } cut-solid \r
82     { -1 0 -17 } cut-solid \r
83     { 0 1 17 } cut-solid \r
84     { 0 -1  -19 } cut-solid \r
85     ensure-adjacencies\r
86     \r
87 ;\r
89 : solid7 ( -- solid )\r
90       <solid> \r
91     2 >>dimension\r
92     "solid7" >>name\r
93     { 1 1 1 } >>color\r
94     { 1 0 38 } cut-solid \r
95     { 1 -5 -66 } cut-solid \r
96     { -2 1 -75 } cut-solid\r
97     ensure-adjacencies\r
98     \r
99 ;\r
101 : solid6s ( -- seq )\r
102   solid3 clone solid2 clone subtract\r
105 : space1 ( -- space )\r
106     <space>\r
107         2 >>dimension\r
108      !    solid3 suffix-solids\r
109         solid1 suffix-solids\r
110         solid2 suffix-solids\r
111     !   solid6s [ suffix-solids ] each \r
112         solid4 suffix-solids\r
113      !   solid5 suffix-solids\r
114         solid7 suffix-solids\r
115         { 1 1 1 } >>ambient-color\r
116             <light>\r
117         { -100 -100 } >>position\r
118         { 0.2 0.7 0.1 } >>color\r
119         suffix-lights\r
122 : space2 ( -- space )\r
123     <space>\r
124         4 >>dimension\r
125        ! 4cube suffix-solids\r
126         { 1 1 1 } >>ambient-color\r
127             <light>\r
128         { -100 -100 } >>position\r
129         { 0.2 0.7 0.1 } >>color\r
130         suffix-lights\r
132        ;\r
136 ! {\r
137 !        { 1 0 0 0 }\r
138 !        { 0 1 0 0 }\r
139 !        { 0 0 0.984807753012208 -0.1736481776669303 }\r
140 !        { 0 0 0.1736481776669303 0.984807753012208 }\r
141 !    }\r
143 ! ------------------------------------------------------------\r
144 ! constant+\r
145 [ { 1 2 5 } ] [ { 1 2 3 } 2 constant+ ] unit-test\r
147 ! ------------------------------------------------------------\r
148 ! translate\r
149 [ { 1 -1 0 } ] [ { 1 -1 -5 } { 3 -2 } translate ] unit-test\r
151 ! ------------------------------------------------------------\r
152 ! transform\r
153 [ { -1 -1 -5 21.0 } ] [ { -1 -1 -5 21 }\r
154   { { 1 0 0 }\r
155     { 0 1 0 }\r
156     { 0 0 1 }\r
157     } transform  \r
158 ] unit-test\r
160 ! ------------------------------------------------------------\r
161 ! compare-nleft-to-identity-matrix\r
162 [ t ] [ \r
163     { \r
164         { 1 0 0 1232 } \r
165         { 0 1 0 0 321 } \r
166         { 0 0 1 0 } } \r
167         3 compare-nleft-to-identity-matrix \r
168 ]  unit-test\r
170 [ f ] [ \r
171     { { 1 0 0 } { 0 1 0 } { 0 0 0 } } \r
172     3 compare-nleft-to-identity-matrix \r
173 ] unit-test\r
175 [ f ] [ \r
176     { { 2 0 0 } { 0 1 0 } { 0 0 1 } } \r
177     3 compare-nleft-to-identity-matrix \r
178 ] unit-test\r
179 ! ------------------------------------------------------------\r
180 [ t ] [ \r
181   { { 1 0 0 }\r
182     { 0 1 0 }\r
183     { 0 0 1 } } 3 valid-solution? \r
184 ] unit-test\r
186 [ f ] [ \r
187   { { 1 0 0 1 }\r
188     { 0 0 0 1 }\r
189     { 0 0 1 0 } } 3 valid-solution? \r
190 ] unit-test\r
192 [ f ] [ \r
193   { { 1 0 0 1 }\r
194     { 0 0 0 1 } } 3 valid-solution? \r
195 ] unit-test\r
197 [ f ] [ \r
198   { { 1 0 0 1 }\r
199     { 0 0 0 1 }\r
200     { 0 0 1 0 } } 2 valid-solution? \r
201 ] unit-test\r
203 ! ------------------------------------------------------------\r
204 [ 3 ] [ { 1 2 3 } last ] unit-test \r
206 [ { 1 2 5 } ] [ { 1 2 3 } dup [ 2 + ] change-last ] unit-test \r
208 ! ------------------------------------------------------------\r
209 ! position-point \r
210 [ 0 ] [ \r
211     { 1 -1 -5 } { 2 7 } position-point \r
212 ] unit-test\r
214 ! ------------------------------------------------------------\r
216 ! transform\r
217 ! TODO construire un exemple\r
220 ! ------------------------------------------------------------\r
221 ! slice-solid \r
223 ! ------------------------------------------------------------\r
224 ! solve-equation \r
225 ! deux cas de tests, avec solution et sans solution\r
227 [ { 2 7 } ] \r
228 [ { { 1 -1 -5 } { 1 2 16 } } intersect-hyperplanes ] \r
229 unit-test\r
231 [ f ] \r
232 [ { { 1 -1 -5 } { 1 2 16 } { -1 -1 -21 } } intersect-hyperplanes  ]\r
233 unit-test\r
235 [ f ] \r
236 [ { { 1 0 -5 } { 1 0 16 }  } intersect-hyperplanes  ]\r
237 unit-test\r
239 ! ------------------------------------------------------------\r
240 ! point-inside-halfspace\r
241 [ t ] [ { 1 -1 -5 } { 0 0 }  point-inside-halfspace? ] \r
242 unit-test\r
243 [ f ] [ { 1 -1 -5 } { 8 13 }  point-inside-halfspace? ] \r
244 unit-test\r
245 [ t ] [ { 1 -1 -5 } { 8 13 }  point-inside-or-on-halfspace? ] \r
246 unit-test\r
249 ! ------------------------------\r
250 ! order solid\r
252 [  1 ] [ 0 >pv solid1 solid2 order-solid ] unit-test\r
253 [ -1 ] [ 0 >pv solid2 solid1 order-solid ] unit-test\r
254 [  f ] [ 1 >pv solid1 solid2 order-solid ] unit-test\r
255 [  f ] [ 1 >pv solid2 solid1 order-solid ] unit-test\r
258 ! clip-solid\r
259 [ { { 13 15 } { 15 13 } { 13 13 } } ]\r
260     [ 0 >pv solid2 solid1 clip-solid first corners>> ] unit-test\r
262 solid1 corners>> '[ _ ]\r
263     [ 0 >pv solid1 solid1 clip-solid first corners>> ] unit-test\r
265 solid1 corners>> '[ _ ]\r
266     [ 0 >pv solid1 solid2 clip-solid first corners>> ] unit-test\r
268 solid1 corners>> '[ _ ]\r
269     [ 1 >pv solid1 solid2 clip-solid first corners>> ] unit-test\r
270 solid2 corners>> '[ _ ]\r
271     [ 1 >pv solid2 solid1 clip-solid first corners>> ] unit-test\r
275     {\r
276         { { 13 15 } { 15 13 } { 13 13 } }\r
277         { { 16 17 } { 16 13 } { 36 17 } { 36 13 } }\r
278         { { 16 1 } { 16 2 } { 36 1 } { 36 2 } }\r
279     }\r
280 ] [     0 >pv solid2 solid3  2array \r
281         solid1 (solids-silhouette-subtract) \r
282         [ corners>> ] map\r
283   ] unit-test\r
288     { { 8 13 } { 2 7 } { 12 9 } { 12 2 } }\r
289     { { 13 15 } { 15 13 } { 13 13 } }\r
290     { { 16 17 } { 16 15 } { 36 17 } { 36 15 } }\r
291     { { 16 1 } { 16 2 } { 36 1 } { 36 2 } }\r
293 ] [ \r
294     0 >pv  <space> solid1 suffix-solids \r
295         solid2 suffix-solids \r
296         solid3 suffix-solids\r
297      remove-hidden-solids\r
298     solids>> [ corners>> ] map\r
299 ] unit-test\r
301 ! { }\r
302 ! { }\r
303 ! <light> { 0.2 0.3 0.4 } >>color { 1 -1 1 } >>direction     suffix\r
304 ! <light> { 0.4 0.3 0.1 } >>color { -1 -1 -1 } >>direction   suffix\r
305 ! suffix \r
306 ! { 0.1 0.1 0.1 } suffix ! ambient color\r
307 ! { 0.23 0.32 0.17 } suffix ! solid color\r
308 ! solid3 faces>> first \r
310 ! enlight-projection\r