ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/resources/test_lib.rb
Revision: 1.2
Committed: Mon Jun 10 22:31:53 2019 UTC (4 years, 10 months ago) by greg
Branch: MAIN
CVS Tags: rad5R4, rad5R3, HEAD
Changes since 1.1: +72 -9 lines
Log Message:
Update from Rob G.

File Contents

# Content
1 #!/usr/bin/ruby
2
3 # Radiance test library
4
5 # Use with cmake build system deployed by NREL
6 # Run from [build]/resources
7 # usage: [ruby]test_lib[.rb] (runs all tests)
8 # usage: [ruby]test_lib[.rb] -n [n] -t ['testname', 'all']
9
10
11 $stderr.sync = true
12 require 'optparse'
13 require 'etc'
14 # default options
15 flag = false
16
17 tst = "all"
18
19
20 tproc = Etc.nprocessors
21 nproc = tproc / 2 # half cores by default, override with -n
22 list = ["x", "y", "z"]
23
24 clean = false
25
26 # parse arguments
27 file = __FILE__
28 ARGV.options do |opts|
29 opts.on("-t", "--test=val", String) { |val| tst = val }
30 opts.on("-n", "--nproc=val", Integer) { |val| nproc = val }
31
32 opts.on("-c", "--clean") { |val| clean = val}
33 opts.parse!
34 end
35
36 # print banner
37 warn "Radiance Test Library"
38
39 ### Cleanup ###
40
41 if clean == true
42
43 puts "cleaning up"
44
45 clean_list = []
46
47 globs = [
48 '../test/renders/*.oct',
49 '../test/renders/*.amb',
50 '../test/renders/*_ill.dat',
51 '../test/renders/blinds_ill?.dat',
52 '../test/renders/*_*.hdr',
53 '../test/renders/*.unf',
54 './test/gen/gen*.rad'
55 ]
56
57 globs.each do |glob|
58 add_list = Dir.glob(glob)
59 (clean_list << add_list).flatten!
60 end
61
62 #*.[cg]pm{,.leaf}
63
64 add_files = [
65
66 '../test/renders/inst_rad.txt',
67 '../test/renders/combined.rad',
68 '../test/renders/fmirror.mtx',
69 '../test/gen/replmarks.rad',
70 '../test/util/test.mtx',
71 '../test/cal/cnt.txt',
72 '../test/cal/rcalc.txt',
73 '../test/cal/total.txt',
74 '../test/cal/histo.txt',
75 '../test/cal/rlam.txt'
76
77 ]
78 (clean_list << add_files).flatten!
79
80 clean_list.each do |rmfile|
81 if File.exist?(rmfile)
82 File.delete(rmfile)
83 puts "deleted #{rmfile}"
84 end
85 end
86 exit
87
88 end
89
90 ## END Cleanup ##
91
92 # print opts
93 warn "test: #{tst.inspect}"
94 warn "using #{nproc.inspect} cores (of #{tproc} total)"
95
96 test_in = tst
97
98 test_total = 0
99 @test_pass = 0
100 @test_fail = 0
101
102 all_tests = [
103 'test_xform' , 'test_rad' , 'test_rtrace' , 'test_vwright' , 'test_rcollate' , 'test_dctimestep',
104 'test_getinfo' , 'test_rmtxop' , 'test_oconv' , 'test_rfluxmtx' , 'test_dielectric_def' ,
105 'test_dielectric_fish', 'test_replmarks', 'test_gensky', 'test_gendaymtx','test_genbox',
106 'test_genrev', 'test_genworm', 'test_genprism', 'test_gensurf', 'test_cnt', 'test_rcalc',
107 'test_total', 'test_histo', 'test_rlam'
108 ]
109
110
111 # report pass/fail status
112
113 def rcpf
114 if $?.exitstatus == 0
115 @test_pass +=1
116
117 puts "result: PASS"
118 else
119 @test_fail +=1
120 puts "result: FAIL"
121
122 end
123 end
124
125 # Number of processes to use on tests that run multi-core
126 NPROC = nproc
127
128 # Image reduction for comparisons
129 RDU_PFILT = "pfilt -1 -r 1 -x 128 -y 128 -pa 1"
130
131 # Image comparison command
132 IMG_CMP = "radcompare -v -rms 0.07 -max 1.5"
133
134 ## tests from test/util
135
136 def test_vwright
137
138 Dir.chdir('../test/util') do
139 # generate test input
140 cmd = "vwright -vf test.vf 3.5 > vwright.txt"
141 system(cmd)
142
143 # compare to reference
144 cmd = "radcompare -v ref/vwright.txt vwright.txt"
145 system(cmd)
146
147 # report pass/fail
148 rcpf
149
150 # cleanup
151 # File.delete("vwright.mtx")
152 end
153
154 end
155
156 def make_test_mtx
157
158 Dir.chdir('../test/util') do
159
160 cmd = "rcollate -t ../renders/ref/rfmirror.mtx > test.mtx"
161 system(cmd)
162
163 end
164
165 end
166
167 def test_rcollate
168
169 make_test_mtx if !File.exist?("../test/util/test.mtx")
170
171 Dir.chdir('../test/util') do
172 cmd = "radcompare -v ref/test.mtx test.mtx"
173 system(cmd)
174 end
175
176 rcpf
177
178 #File.delete("#{t}/test.mtx")
179
180 end
181
182 def test_dctimestep
183
184 make_test_mtx if !File.exist?("../test/util/test.mtx")
185
186 Dir.chdir('../test/util') do
187 cmd = "gensky 3 21 10:15PST +s -g .3 -g 2.5 -a 36 -o 124 | genskyvec -m 1 -c .92 1.03 1.2 | dctimestep '!rmtxop -ff -t test.mtx' > dctimestep.mtx"
188 system(cmd)
189 cmd = "radcompare -v ref/dctimestep.mtx dctimestep.mtx"
190 system(cmd)
191 end
192
193 rcpf
194
195 #File.delete("#{t}/dctimestep.mtx")
196
197 end
198
199 def test_getinfo
200
201 make_test_mtx if !File.exist?("../test/util/test.mtx")
202
203 Dir.chdir('../test/util') do
204 cmd = "getinfo -a Guppies 'Fredo the Frog' < test.mtx | getinfo > getinfo.txt"
205 system(cmd)
206 cmd = "radcompare -v ref/getinfo.txt getinfo.txt"
207 system(cmd)
208 end
209
210 rcpf
211
212 #File.delete("#{t}/getinfo.txt")
213
214 end
215
216 def test_rmtxop
217
218 make_test_mtx if !File.exist?("../test/util/test.mtx")
219
220 Dir.chdir('../test/util') do
221 cmd = "rmtxop -ff -c .3 .9 .2 test.mtx -c .7 .2 .3 -t test.mtx > rmtxop.mtx"
222 puts("command: #{cmd}")
223 system(cmd)
224 cmd = "radcompare -v ref/rmtxop.mtx rmtxop.mtx"
225 puts("command: #{cmd}")
226 system(cmd)
227 end
228
229 rcpf
230 #File.delete("#{t}/rmtxop.mtx")
231
232 end
233
234 ### END test/util ###
235
236
237 ### test/renders ###
238
239 def inst_oct
240 Dir.chdir('../test/renders') do
241 cmd = "rad -v 0 inst.rif"
242 puts("command: #{cmd}")
243 system(cmd)
244 end
245 end
246
247 def test_xform
248 combined_rad if !File.exist?("../test/renders/combined.rad")
249 Dir.chdir('../test/renders') do
250 cmd = "radcompare -v -max 0.04 ref/combined.rad combined.rad"
251 puts("command: #{cmd}")
252 system(cmd)
253 rcpf
254 end
255 end
256
257 def combined_rad
258 Dir.chdir('../test/renders') do
259 cmd = "xform -f combined_scene.rad | grep -v '^[ ]*#' > combined.rad"
260 puts("command: #{cmd}")
261 system(cmd)
262 end
263 end
264
265 def test_rad
266 Dir.chdir('../test/renders') do
267 cmd = 'rad -n -s -e inst.rif > inst_rad.txt'
268 system(cmd)
269 cmd = 'radcompare -v ref/inst_rad.txt inst_rad.txt'
270 puts("command: #{cmd}")
271 system(cmd)
272 rcpf
273 end
274 end
275
276 def test_oconv
277 inst_oct if !File.exist?("../test/renders/inst.oct")
278 Dir.chdir('../test/renders') do
279 cmd="radcompare -v ref/inst.oct inst.oct"
280 system(cmd)
281 end
282 rcpf
283 end
284
285 def gen_rtmirror_fish_hdr
286 Dir.chdir('../test/renders') do
287 puts "generating input file: rtmirror_fish.hdr"
288 cmd = "rad -v 0 mirror.rif OPT=mirror.opt"
289 system(cmd)
290 cmd = "vwrays -ff -vf fish.vf -x 2048 -y 2048 | rtrace -n #{NPROC} @mirror.opt -ffc -x 2048 -y 2048 mirror.oct | pfilt -1 -e +3 -r .6 -x /2 -y /2 > rtmirror_fish.hdr"
291 # rm -f mirror.opt
292 puts("command: #{cmd}")
293 system(cmd)
294 end
295 end
296
297 def test_rtrace
298 gen_rtmirror_fish_hdr if !File.exist?("../test/renders/rtmirror_fish.hdr")
299 Dir.chdir('../test/renders') do
300 cmd = "#{RDU_PFILT} rtmirror_fish.hdr | #{IMG_CMP} -h ref/mirror_fish.hdr -"
301 puts("command: #{cmd}")
302 system(cmd)
303 rcpf
304 end
305 end
306
307 def test_rfluxmtx
308 gen_rfmirror_mtx if !File.exist?("../test/renders/rfmirror.mtx")
309 Dir.chdir('../test/renders') do
310 cmd = 'radcompare -v -max .4 -rms .05 ref/rfmirror.mtx rfmirror.mtx'
311 puts("command: #{cmd}")
312 system(cmd)
313 rcpf
314 end
315 end
316
317 def gen_rfmirror_mtx
318 Dir.chdir('../test/renders') do
319 cmd = "rfluxmtx -n #{NPROC} -ab 2 -lw 1e-4 mirror.rad dummysky.rad basic.mat diorama_walls.rad closed_end.rad front_cap.rad glass_pane.rad antimatter_portal.rad > rfmirror.mtx"
320 puts("command: #{cmd}")
321 system(cmd)
322 end
323 end
324
325 def gen_dielectric_oct
326 Dir.chdir('../test/renders') do
327 cmd = 'rad -v 0 dielectric.rif'
328 puts("command: #{cmd}")
329 system(cmd)
330 end
331 end
332
333 def test_dielectric_def #ref/dielectric_def.hdr dielectric_def.hdr
334 gen_dielectric_def if !File.exist?("../test/renders/dielectric_def.hdr")
335 gen_dielectric_def_ref if !File.exist?("../test/renders/ref/dielectric_def.hdr")
336 Dir.chdir('../test/renders') do
337 cmd = "#{RDU_PFILT} dielectric_def.hdr | #{IMG_CMP} ref/dielectric_def.hdr -"
338 puts("command: #{cmd}")
339 system(cmd)
340 rcpf
341 end
342 end
343
344 def gen_dielectric_def_ref
345 gen_dielectric_def if !File.exist?('../test/renders/dielectric_def.hdr')
346 Dir.chdir('../test/renders') do
347 cmd = '#{RDU_PFILT} dielectric_def.hdr > ref/dielectric_def.hdr'
348 puts("command: #{cmd}")
349 system(cmd)
350 end
351 end
352
353 def gen_dielectric_def #dielectric.oct
354 gen_dielectric_oct if !File.exist?('../test/renders/dielectric.oct')
355 Dir.chdir('../test/renders') do
356 cmd = 'rad -v def dielectric.rif'
357 puts("command: #{cmd}")
358 system(cmd)
359 end
360 end
361
362
363 ### Reference and test for dielectric view fish ###
364
365 def test_dielectric_fish # ref/dielectric_fish.hdr dielectric_fish.hdr
366 gen_dielectric_fish_hdr if !File.exist?('../test/renders/dielectric_fish.hdr')
367 gen_ref_dielectric_fish_hdr if !File.exist?('../test/renders/ref/dielectric_fish.hdr')
368 Dir.chdir('../test/renders') do
369 cmd = "#{RDU_PFILT} dielectric_fish.hdr | #{IMG_CMP} ref/dielectric_fish.hdr -"
370 puts("command: #{cmd}")
371 system(cmd)
372 rcpf
373 end
374 end
375
376 def gen_ref_dielectric_fish_hdr #dielectric.oct
377 gen_dielectric_fish_hdr if !File.exist?('../test/renders/dielectric_fish.hdr')
378 Dir.chdir('../test/renders') do
379 cmd = "#{RDU_PFILT} dielectric_fish.hdr > ref/dielectric_fish.hdr"
380 puts("command: #{cmd}")
381 system(cmd)
382 end
383 end
384
385 def gen_dielectric_fish_hdr
386 gen_dielectric_oct if !File.exist?('../test/renders/dielectric.oct')
387 Dir.chdir('../test/renders') do
388 cmd = 'rad -v fish dielectric.rif'
389 puts("command: #{cmd}")
390 system(cmd)
391 end
392 end
393
394 ### End dielectric-fish tests
395
396
397 ### END test/renders ###
398
399
400 ### test/gen ###
401
402 def test_replmarks
403 Dir.chdir('../test/gen') do
404 cmd = "replmarks -s 1 -x dummy.rad rmod markers.rad | grep -v '^[ ]*#' > replmarks.rad"
405 puts("command: #{cmd}")
406 system(cmd)
407
408 rcpf
409 end
410 #rm -f replmarks.rad
411 end
412
413
414 def test_gensky
415 Dir.chdir('../test/gen') do
416 cmd = 'gensky 11 15 14:21EST +s -g .25 -t 3.5 -a 40.7128 -o 74.006 > NYC11-15-14-21.rad'
417 puts("command: #{cmd}")
418 system(cmd)
419
420 cmd = 'radcompare ref/NYC11-15-14-21.rad NYC11-15-14-21.rad'
421 puts("command: #{cmd}")
422 system(cmd)
423
424 rcpf
425 end
426 #rm -f NYC11-15-14-21.rad
427 end
428
429
430 def test_gendaymtx
431 Dir.chdir('../test/gen') do
432 cmd = 'gendaymtx -r 90 -m 1 -g .3 .2 .1 -c .9 .9 1.2 test.wea > test.smx'
433 puts("command: #{cmd}")
434 system(cmd)
435
436 cmd = 'radcompare ref/test.smx test.smx'
437 puts("command: #{cmd}")
438 system(cmd)
439
440 rcpf
441 end
442 #rm -f test.smx
443 end
444
445 def test_genbox
446 Dir.chdir('../test/gen') do
447 cmd = 'genbox tmat tbox 1 2 3 -i -b .1 > genbox.rad'
448 puts("command: #{cmd}")
449 system(cmd)
450
451 cmd = 'radcompare ref/genbox.rad genbox.rad'
452 puts("command: #{cmd}")
453 system(cmd)
454
455 rcpf
456 end
457 #rm -f genbox.rad
458 end
459
460 def test_genrev
461 Dir.chdir('../test/gen') do
462 cmd = "genrev tmat trev 'sin(2*PI*t)' '2+cos(2*PI*t)' 16 -s > genrev.rad"
463 puts("command: #{cmd}")
464 system(cmd)
465
466 cmd = 'radcompare ref/genrev.rad genrev.rad'
467 puts("command: #{cmd}")
468 system(cmd)
469
470 rcpf
471 end
472 #rm -f genrev.rad
473 end
474
475 def test_genworm
476 Dir.chdir('../test/gen') do
477 cmd = "genworm tmat tworm '0' '5*sin(t)' '5*cos(t)' '.4-(.5-t)*(.5-t)' 8 > genworm.rad"
478 puts("command: #{cmd}")
479 system(cmd)
480
481 cmd = 'radcompare ref/genworm.rad genworm.rad'
482 puts("command: #{cmd}")
483 system(cmd)
484
485 rcpf
486 end
487 #rm -f genworm.rad
488 end
489
490 def test_genprism
491 Dir.chdir('../test/gen') do
492 cmd = "genprism tmat tprism 8 0 5 4 5 4 4 24.5 4 24.5 3 30 1.5 30 22 0 22 -l 0 0 -1.5 -r .2 > genprism.rad"
493 puts("command: #{cmd}")
494 system(cmd)
495
496 cmd = 'radcompare ref/genprism.rad genprism.rad'
497 puts("command: #{cmd}")
498 system(cmd)
499
500 rcpf
501 end
502 #rm -f genprism.rad
503 end
504
505 def test_gensurf
506 Dir.chdir('../test/gen') do
507 cmd = "gensurf tmat tsurf '15.5+x(theta(s),phi(t))' '10.5+y(theta(s),phi(t))' '30.75+z(theta(s),phi(t))' 4 15 -f basin.cal -s > gensurf.rad"
508 puts("command: #{cmd}")
509 system(cmd)
510
511 cmd = 'radcompare ref/gensurf.rad gensurf.rad'
512 puts("command: #{cmd}")
513 system(cmd)
514
515 rcpf
516 end
517 #rm -f gensurf.rad
518 end
519
520
521 ### END test/gen ###
522
523
524 ### test/cal ###
525
526 def test_cnt
527 gen_cnt_txt if !File.exist?('../test/cal/cnt.txt')
528 Dir.chdir('../test/cal') do
529 cmd = 'radcompare ref/cnt.txt cnt.txt'
530 puts("command: #{cmd}")
531 system(cmd)
532
533 rcpf
534 end
535 end
536
537 def gen_cnt_txt
538 Dir.chdir('../test/cal') do
539 cmd = 'cnt 5 3 2 > cnt.txt'
540 puts("command: #{cmd}")
541 system(cmd)
542 end
543 end
544
545 def gen_rcalc_txt
546 Dir.chdir('../test/cal') do
547 cmd = "rcalc -o 'Test $${v1} $$(s1) $${v2}' -e 'v1=$$1*$$2;v2=($$2-$$1)*exp($$3)' -s s1=HEY cnt.txt > rcalc.txt"
548 puts("command: #{cmd}")
549 system(cmd)
550 end
551 end
552
553 def test_rcalc
554 gen_rcalc_txt if !File.exist?('../test/cal/rcalc.txt')
555 Dir.chdir('../test/cal') do
556 cmd = 'radcompare ref/rcalc.txt rcalc.txt'
557 puts("command: #{cmd}")
558 system(cmd)
559
560 rcpf
561 end
562 end
563
564 def gen_total_txt
565 gen_cnt_txt if !File.exist?('../test/cal/cnt.txt')
566 Dir.chdir('../test/cal') do
567 build = [
568 'total cnt.txt > total.txt',
569 'total -l cnt.txt >> total.txt',
570 'total -u cnt.txt >> total.txt',
571 'total -m cnt.txt >> total.txt',
572 'total -s2.5 cnt.txt >> total.txt',
573 'total -3 -r cnt.txt >> total.txt'
574 ]
575 build.each do |cmd|
576 system(cmd)
577 end
578 end
579 end
580
581 def test_total
582 gen_total_txt if !File.exist?('../test/cal/total.txt')
583 Dir.chdir('../test/cal') do
584 cmd = 'radcompare ref/total.txt total.txt'
585 puts("command: #{cmd}")
586 system(cmd)
587
588 rcpf
589 end
590 end
591
592 def gen_histo_txt
593 gen_total_txt if !File.exist?('../test/cal/total.txt')
594 Dir.chdir('../test/cal') do
595 cmd = 'histo 0 60 5 < total.txt > histo.txt'
596 puts("command: #{cmd}")
597 system(cmd)
598
599 end
600 end
601
602 def test_histo
603 gen_histo_txt if !File.exist?('../test/cal/histo.txt')
604 Dir.chdir('../test/cal') do
605 cmd = 'radcompare ref/histo.txt histo.txt'
606 puts("command: #{cmd}")
607 system(cmd)
608
609 rcpf
610 end
611 end
612
613 def gen_rlam_txt
614 gen_total_txt if !File.exist?('../test/cal/total.txt')
615 gen_cnt_txt if !File.exist?('../test/cal/cnt.txt')
616 gen_histo_txt if !File.exist?('../test/cal/histo.txt')
617
618 Dir.chdir('../test/cal') do
619 cmd = 'rlam -in 5 total.txt cnt.txt histo.txt > rlam.txt'
620 puts("command: #{cmd}")
621 system(cmd)
622
623 end
624 end
625
626 def test_rlam
627 gen_rlam_txt if !File.exist?('../test/cal/rlam.txt')
628 Dir.chdir('../test/cal') do
629 cmd = 'radcompare ref/rlam.txt rlam.txt'
630 puts("command: #{cmd}")
631 system(cmd)
632
633 rcpf
634 end
635 end
636
637
638 ### END test/cal ###
639
640 ### END test methods ###
641
642
643 # call the test already
644
645 if test_in == "all"
646 all_tests.each do |test_in|
647 test_total += 1
648 puts "running test: #{test_in}"
649 method(test_in).call
650 puts ''
651 end
652 else
653 test_total += 1
654 puts "running test: #{test_in}"
655 method(test_in).call
656 puts ''
657 end
658
659 puts "### Total tests: #{test_total} (Passed: #{@test_pass} Failed: #{@test_fail}) ###"
660