From cd623379e1527476011d48698ee5b73d3b48c845 Mon Sep 17 00:00:00 2001 From: Katja Date: Sun, 13 Nov 2011 15:18:49 +0000 Subject: add unittest dir plus content to creb svn path=/trunk/externals/creb/; revision=15736 --- unittests/filterortho~subnormal-unittest .pd | 228 +++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 unittests/filterortho~subnormal-unittest .pd (limited to 'unittests/filterortho~subnormal-unittest .pd') diff --git a/unittests/filterortho~subnormal-unittest .pd b/unittests/filterortho~subnormal-unittest .pd new file mode 100644 index 0000000..46618ac --- /dev/null +++ b/unittests/filterortho~subnormal-unittest .pd @@ -0,0 +1,228 @@ +#N canvas 427 28 691 516 10; +#X obj 69 197 bang~; +#X obj 39 222 snapshot~; +#X obj 38 46 bng 50 1000 50 0 empty empty empty 17 7 0 10 -262144 -260097 +-1; +#X obj 39 249 change; +#X obj 39 296 sel 0; +#X obj 39 322 f; +#X floatatom 55 365 17 0 0 0 - - -; +#X msg 141 59 \; pd dsp 1; +#X msg 205 59 \; pd dsp 1; +#X obj 116 3 loadbang; +#X obj 113 418 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 46 418 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 39 394 moses 1e-46; +#N canvas 582 172 303 432 single 0; +#X obj 27 20 inlet; +#X msg 115 163 NORMAL \$1; +#X msg 25 293 UNIT-TEST-DONE; +#X obj 26 390 print unit-test; +#X obj 54 364 stdout; +#X obj 134 390 outlet; +#X obj 25 247 t b a; +#X obj 53 328 list trim; +#X obj 25 215 pack s f s; +#X obj 81 187 r \$0-classname; +#X msg 26 163 SUBNORMAL \$1; +#X msg 80 45 2; +#X floatatom 80 102 15 0 0 0 - - -; +#X obj 79 17 loadbang; +#X obj 80 73 pow -126; +#X obj 27 124 moses; +#X text 91 122 smallest normal value for float; +#X msg 135 356 set \$1 \$2 \$3; +#X connect 0 0 15 0; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 2 0 4 0; +#X connect 6 0 2 0; +#X connect 6 1 17 0; +#X connect 6 1 7 0; +#X connect 7 0 3 0; +#X connect 7 0 4 0; +#X connect 8 0 6 0; +#X connect 9 0 8 2; +#X connect 10 0 8 0; +#X connect 11 0 14 0; +#X connect 13 0 11 0; +#X connect 14 0 12 0; +#X connect 14 0 15 1; +#X connect 15 0 10 0; +#X connect 15 1 1 0; +#X connect 17 0 5 0; +#X restore 103 442 pd single; +#N canvas 187 45 257 407 double 0; +#X obj 27 20 inlet; +#X msg 24 279 UNIT-TEST-DONE; +#X obj 25 366 print unit-test; +#X obj 52 339 stdout; +#X obj 131 366 outlet; +#X obj 25 241 t b a; +#X msg 115 143 NORMAL \$1; +#X obj 53 308 list trim; +#X obj 25 217 pack s f s; +#X obj 82 187 r \$0-classname; +#X msg 26 143 SUBNORMAL \$1; +#X msg 72 48 2; +#X obj 71 20 loadbang; +#X obj 72 76 pow -1022; +#X floatatom 73 111 20 0 0 0 - - -; +#X obj 27 108 moses; +#X msg 132 331 set \$1 \$2 \$3; +#X connect 0 0 15 0; +#X connect 1 0 3 0; +#X connect 1 0 2 0; +#X connect 5 0 1 0; +#X connect 5 1 16 0; +#X connect 5 1 7 0; +#X connect 6 0 8 0; +#X connect 7 0 2 0; +#X connect 7 0 3 0; +#X connect 8 0 5 0; +#X connect 9 0 8 2; +#X connect 10 0 8 0; +#X connect 11 0 13 0; +#X connect 12 0 11 0; +#X connect 13 0 14 0; +#X connect 13 0 15 1; +#X connect 15 0 10 0; +#X connect 15 1 6 0; +#X connect 16 0 4 0; +#X restore 39 442 pd double; +#X msg 39 477 SUBNORMAL 1.0581381223108e-310 filterortho~; +#N canvas 683 194 435 442 more 0; +#X msg 39 359 2; +#X floatatom 39 413 15 0 0 0 - - -; +#X obj 39 330 t b f; +#X msg 38 46 2; +#X floatatom 55 99 15 0 0 0 - - -; +#X obj 38 385 pow; +#X obj 37 18 loadbang; +#X floatatom 38 306 5 0 0 0 - - -; +#X floatatom 40 155 15 0 0 0 - - -; +#X text 36 254 check how small a non-zero value can be represented +; +#X text 37 184 Some CPU architectures support denormal numbers by default. +Repeated calculation of subnormal numbers can happen in recursive filters +\, feedback delay lines \, reverb simulators etc. This slows down calculation +considerably.; +#X obj 54 71 pow -126; +#X obj 39 126 pow -1022; +#X text 143 154 smallest bnormal value for double; +#X msg 39 277 -127; +#X msg 82 276 -1023; +#X text 156 98 smallest normal value for float; +#X connect 0 0 5 0; +#X connect 2 0 0 0; +#X connect 2 1 5 1; +#X connect 3 0 11 0; +#X connect 3 0 12 0; +#X connect 5 0 1 0; +#X connect 6 0 3 0; +#X connect 7 0 2 0; +#X connect 11 0 4 0; +#X connect 12 0 8 0; +#X connect 14 0 7 0; +#X connect 15 0 7 0; +#X restore 307 142 pd more; +#X text 57 343 smallest non-zero number seen by [snapshot~]; +#X text 301 74 In this patch we test if the subnormals-flush routine +works as expected. Open [pd more] to see how small subnormals can go +for a given precision.; +#X obj 336 476 s \$0-classname; +#X obj 336 448 symbol; +#X obj 337 398 loadbang; +#X obj 39 166 creb/filterortho~; +#X msg 336 423 filterortho~; +#X text 303 6 [creb/filterortho~] checks for subnormals once per signal +block. Therefore \, subnormals do happen when the curve approaches +zero \, but only for a short period of time (depending on blocksize). +; +#X obj 115 29 t b b; +#N canvas 550 199 205 218 click~ 0; +#X obj 35 25 inlet; +#X obj 37 127 sig~; +#X msg 36 90 50; +#X msg 74 88 0; +#X obj 74 59 delay 2; +#X obj 37 169 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 3 0; +#X restore 39 111 pd click~; +#X obj 39 272 abs; +#N canvas 626 222 402 246 write 0; +#X obj 27 38 inlet; +#X obj 25 198 tabwrite \$0-smallnumbers; +#X obj 26 91 t f b; +#X obj 54 132 f; +#X obj 85 132 + 1; +#X obj 132 35 inlet; +#X msg 132 89 const 0; +#X msg 70 94 0; +#X obj 133 133 s \$0-smallnumbers; +#X msg 188 89 arrayviewclose; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 2 1 3 0; +#X connect 3 0 4 0; +#X connect 3 0 1 1; +#X connect 4 0 3 1; +#X connect 5 0 6 0; +#X connect 5 0 7 0; +#X connect 5 0 9 0; +#X connect 6 0 8 0; +#X connect 7 0 3 1; +#X connect 9 0 8 0; +#X restore 79 323 pd write; +#X obj 457 211 s \$0-smallnumbers; +#X msg 456 179 arrayviewlistnew; +#X obj 455 250 table \$0-smallnumbers 10000; +#X obj 169 198 snapshot~; +#X obj 169 225 change; +#X obj 169 172 metro 100; +#X obj 168 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X floatatom 179 253 20 0 0 0 - - -; +#X obj 168 277 print; +#X msg 53 137 setBP 100 2; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 26 0; +#X connect 2 0 28 1; +#X connect 3 0 27 0; +#X connect 4 0 5 0; +#X connect 4 1 5 1; +#X connect 4 1 28 0; +#X connect 5 0 6 0; +#X connect 5 0 12 0; +#X connect 9 0 25 0; +#X connect 12 0 11 0; +#X connect 12 0 14 0; +#X connect 12 1 10 0; +#X connect 12 1 13 0; +#X connect 13 0 15 0; +#X connect 14 0 15 0; +#X connect 20 0 19 0; +#X connect 21 0 23 0; +#X connect 22 0 1 0; +#X connect 22 0 32 0; +#X connect 23 0 20 0; +#X connect 25 0 2 0; +#X connect 25 1 7 0; +#X connect 25 1 38 0; +#X connect 26 0 22 0; +#X connect 27 0 4 0; +#X connect 30 0 29 0; +#X connect 32 0 33 0; +#X connect 33 0 36 0; +#X connect 33 0 37 0; +#X connect 34 0 32 0; +#X connect 35 0 34 0; +#X connect 38 0 22 0; -- cgit v1.2.1