# HG changeset patch # User Chris Cannam # Date 1355615458 0 # Node ID e8d404787c35af0af4aa84c72d1f4d2559e72e0c # Parent 0ddc2aa8885da765c5575a4f12341065cec81935 Start on tests diff -r 0ddc2aa8885d -r e8d404787c35 syntheticstream.yeti --- 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 } diff -r 0ddc2aa8885d -r e8d404787c35 tests.yeti --- /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.";