changeset 16:e8d404787c35

Start on tests
author Chris Cannam
date Sat, 15 Dec 2012 23:50:58 +0000
parents 0ddc2aa8885d
children e2c834980152
files syntheticstream.yeti tests.yeti
diffstat 2 files changed, 75 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/syntheticstream.yeti	Sat Dec 15 00:00:22 2012 +0000
+++ b/syntheticstream.yeti	Sat Dec 15 23:50:58 2012 +0000
@@ -3,7 +3,22 @@
 
 vec = load fvector;
 
-monoStream generator rate seconds =
+makeStreamFromMono rate s n =
+    {
+        get channels () = 1,
+        get sampleRate () = rate,
+        get available () = n - s.position,
+        get finished? () = n <= s.position,
+        read = s.readInterleaved,
+        readInterleaved = s.readInterleaved,
+        readMono = s.readInterleaved,
+        readAll () = s.readInterleaved (n - s.position),
+        readAllInterleaved () = s.readInterleaved (n - s.position),
+        readAllMono () = s.readInterleaved (n - s.position),
+        close = id,
+    };
+
+monoStream rate generator seconds =
    (n = seconds * rate;
     box = {
         var position = 0,
@@ -15,30 +30,29 @@
             done;
             position := position + rc;
             result),
+    };
+    makeStreamFromMono rate box n);
+
+sinusoid rate freq =
+    monoStream rate (sin . (* (freq / (2*pi * rate))));
+
+whiteNoise rate =
+    monoStream rate \((Math#random() * 2.0) - 1.0);
+
+precalculated rate data is number -> ~double[] -> 'a =
+   (n = vec.vectorLength data;
+    box = {
+        var position = 0,
+        readInterleaved count = 
+           (rc = if position + count > n then n - position else count fi;
+            result = vec.subVector data position rc;
+            position := position + rc;
+            result),
         get available () = n - position,
     };
-    { 
-        box,
-        get channels () = 1,
-        get sampleRate () = rate,
-        get available () = box.available,
-        get finished? () = n <= box.position,
-        readInterleaved = box.readInterleaved,
-        read = box.readInterleaved,
-        readMono = box.readInterleaved,
-        readAll () = box.readInterleaved box.available,
-        readAllInterleaved () = box.readInterleaved box.available,
-        readAllMono () = box.readInterleaved box.available,
-        close = id,
-    });
-
-sinusoid freq rate =
-    monoStream (sin . (* (freq / (2*pi * rate)))) rate;
-
-whiteNoise =
-    monoStream \((Math#random() * 2.0) - 1.0);
+    makeStreamFromMono rate box n);
 
 {
-    monoStream, sinusoid, whiteNoise,
+    monoStream, sinusoid, whiteNoise, precalculated
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests.yeti	Sat Dec 15 23:50:58 2012 +0000
@@ -0,0 +1,39 @@
+
+program tests;
+
+ss = load syntheticstream;
+vec = load fvector;
+fr = load framer;
+
+testStream n is number -> 'a  = ss.precalculated 1000 (vec.vector [1..n]);
+
+tests = [
+
+"framer-2x2": \( 
+    fr = fr.frames 2 (testStream 2);
+    length fr == 1
+),
+
+"framer-2x3": \( 
+    fr = fr.frames 2 (testStream 3);
+    length fr == 2
+),
+
+"framer-2x4": \( 
+    fr = fr.frames 2 (testStream 4);
+    length fr == 2
+),
+
+];
+
+var bad = 0;
+
+forHash tests do name f:
+    if not (f ()) then
+        println "\(name) failed.";
+        bad := bad + 1
+    fi
+done;
+
+total = length tests;
+println "Testing done, \(total - bad)/\(total) OK.";