changeset 33:e20d3c23a243

Basic block maths functions, tests for same; simplify tests slightly
author Chris Cannam
date Fri, 21 Dec 2012 15:36:42 +0000
parents 025c88d62f7a
children d36c679577a1
files blockfuncs.yeti test/all.yeti test/test.yeti test/test_blockfuncs.yeti test/test_framer.yeti test/test_fvector.yeti
diffstat 6 files changed, 86 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/blockfuncs.yeti	Fri Dec 21 15:36:42 2012 +0000
@@ -0,0 +1,33 @@
+
+module blockfuncs;
+
+b = load block;
+
+sum' =
+    sum . b.list;
+
+mean bl =
+    case b.length bl of
+        0: 0;
+        len: sum' bl / len
+    esac;
+
+sqr =
+    b.fromList . (map do x: x*x done) . b.list;
+
+sqrt' =
+    b.fromList . (map sqrt) . b.list;
+
+rms =
+    sqrt . mean . sqr;
+
+{
+sum = sum',
+mean,
+sqr,
+sqrt = sqrt',
+rms
+}
+
+
+        
--- a/test/all.yeti	Fri Dec 21 13:32:03 2012 +0000
+++ b/test/all.yeti	Fri Dec 21 15:36:42 2012 +0000
@@ -4,8 +4,10 @@
 test = load test.test;
 fr = load test.test_framer;
 vec = load test.test_fvector;
+bf = load test.test_blockfuncs;
 
 test.runTests "fvector" vec.tests;
 test.runTests "framer" fr.tests;
+test.runTests "blockfuncs" bf.tests;
 
 
--- a/test/test.yeti	Fri Dec 21 13:32:03 2012 +0000
+++ b/test/test.yeti	Fri Dec 21 15:36:42 2012 +0000
@@ -32,7 +32,10 @@
         println "\(group): Failed tests [\(length failed)]: \(strJoin ' ' failed)";
     fi);
 
+declare tests is hash<string, () -> boolean> -> 'a =
+    { tests };
+
 {
-    testStream, compare, failedTests, runTests
+    testStream, compare, failedTests, runTests, declare
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/test_blockfuncs.yeti	Fri Dec 21 15:36:42 2012 +0000
@@ -0,0 +1,45 @@
+
+module test.test_blockfuncs;
+
+stdSqrt = sqrt;
+
+{ zeros, ones, fromList, list } = load block;
+{ sum, mean, sqr, sqrt, rms } = load blockfuncs;
+{ declare, compare } = load test.test;
+
+declare [
+
+"sum": \(
+    compare ((sum . zeros) 0) 0 and
+        compare ((sum . zeros) 5) 0 and
+        compare ((sum . ones) 5) 5 and
+        compare ((sum . fromList) [1,-2,3,0]) 2
+),
+
+"mean": \(
+    compare ((mean . zeros) 0) 0 and
+        compare ((mean . zeros) 5) 0 and
+        compare ((mean . ones) 5) 1 and
+        compare ((mean . fromList) [1,-2,3,0]) 0.5
+),
+
+"sqr": \(
+    compare ((list . sqr . zeros) 0) [] and
+        compare ((list . sqr . ones) 5) [1,1,1,1,1] and
+        compare ((list . sqr . fromList) [0.5,-2,3,0]) [0.25,4,9,0]
+),
+
+"sqrt": \(
+    compare ((list . sqrt . zeros) 0) [] and
+        compare ((list . sqrt . ones) 5) [1,1,1,1,1] and
+        compare ((list . sqrt . fromList) [0.25,4,9,0]) [0.5,2,3,0]
+),
+
+"rms": \(
+    compare ((rms . zeros) 0) 0 and
+        compare ((rms . ones) 5) 1 and
+        compare ((rms . fromList) [-1,2,2]) (stdSqrt 3)
+),
+
+];
+
--- a/test/test_framer.yeti	Fri Dec 21 13:32:03 2012 +0000
+++ b/test/test_framer.yeti	Fri Dec 21 15:36:42 2012 +0000
@@ -5,7 +5,7 @@
 block = load block;
 test = load test.test;
 
-tests = [
+test.declare [
 
 "framecount-2x2": \( 
     fr = fr.frames { framesize = 2, hop = 2 } (test.testStream 2);
@@ -89,6 +89,5 @@
 
 ];
 
-{ tests is hash<string, () -> boolean> };
 
 
--- a/test/test_fvector.yeti	Fri Dec 21 13:32:03 2012 +0000
+++ b/test/test_fvector.yeti	Fri Dec 21 15:36:42 2012 +0000
@@ -4,7 +4,7 @@
 vec = load fvector;
 t = load test.test;
 
-tests = [
+t.declare [
 
 "zeros-empty": \(
     v = vec.zeros 0;
@@ -100,5 +100,4 @@
 
 ];
 
-{ tests is hash<string, () -> boolean> };