aboutsummaryrefslogtreecommitdiff
path: root/unittests/filterortho~subnormal-unittest .pd
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/filterortho~subnormal-unittest .pd')
-rw-r--r--unittests/filterortho~subnormal-unittest .pd228
1 files changed, 228 insertions, 0 deletions
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;