ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/resources/test_lib.rb
Revision: 1.1
Committed: Wed Apr 3 22:33:48 2019 UTC (6 years, 1 month ago) by greg
Branch: MAIN
Log Message:
New files required for unit testing from Rob G.

File Contents

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