Mercurial > hg > may
changeset 35:1f80673af4c7
Make concat take a list of arbitrary length; test it, and improve test output
author | Chris Cannam |
---|---|
date | Sat, 22 Dec 2012 10:08:06 +0000 |
parents | d36c679577a1 |
children | fa49869bda51 |
files | block.yeti framer.yeti fvector.yeti test/all.yeti test/test.yeti test/test_fvector.yeti |
diffstat | 6 files changed, 46 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/block.yeti Fri Dec 21 22:56:45 2012 +0000 +++ b/block.yeti Sat Dec 22 10:08:06 2012 +0000 @@ -29,8 +29,8 @@ resizedTo n b = Block (vec.resizedTo n (unblock b)); -concat b1 b2 = - Block (vec.concat (unblock b1) (unblock b2)); +concat blocks = + Block (vec.concat (map unblock blocks)); { zeros, ones,
--- a/framer.yeti Fri Dec 21 22:56:45 2012 +0000 +++ b/framer.yeti Sat Dec 22 10:08:06 2012 +0000 @@ -28,8 +28,8 @@ // Retain framesize - hop samples from old buffer, add hop samples // (zero-padded if necessary) just read buffer = vec.concat - (vec.rangeOf buffer hop (size-hop)) - (vec.resizedTo hop samples); + [vec.rangeOf buffer hop (size-hop), + vec.resizedTo hop samples]; // Number of "valid" elements (not tail-end zero-padding) left in buffer remaining = valid - (hop - obtained);
--- a/fvector.yeti Fri Dec 21 22:56:45 2012 +0000 +++ b/fvector.yeti Sat Dec 22 10:08:06 2012 +0000 @@ -39,12 +39,16 @@ resizedTo n v is number -> ~double[] -> ~double[] = Arrays#copyOf(v, n); -concat v1 v2 is ~double[] -> ~double[] -> ~double[] = - (v1len = length' v1; - v2len = length' v2; - v = resizedTo (v1len + v2len) v1; - for [0..v2len-1] do i: v[v1len + i] := v2[i] done; - v); +concat vv is list?<~double[]> -> ~double[] = + (len = sum (map length' vv); + vout = zeros len; + var base = 0; + for vv do v: + vlen = length' v; + for [0..vlen-1] do i: vout[base + i] := v[i] done; + base := base + vlen; + done; + vout); { zeros, ones,
--- a/test/all.yeti Fri Dec 21 22:56:45 2012 +0000 +++ b/test/all.yeti Sat Dec 22 10:08:06 2012 +0000 @@ -6,8 +6,19 @@ 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; +tests = [ +"fvector": vec.tests, +"framer": fr.tests, +"blockfuncs": bf.tests, +]; +bad = sum (mapHash do name tests: test.runTests name tests done tests); +if (bad > 0) then + println "\n** \(bad) test(s) failed!"; +else + () +fi + + +
--- a/test/test.yeti Fri Dec 21 22:56:45 2012 +0000 +++ b/test/test.yeti Sat Dec 22 10:08:06 2012 +0000 @@ -27,10 +27,13 @@ runTests group testHash = (failed = failedTests testHash; - println "\(group): \(length testHash - length failed)/\(length testHash) tests passed"; + good = (length testHash - length failed); + bad = length failed; + println "\(group): \(good)/\(good+bad) tests passed"; if not empty? failed then - println "\(group): Failed tests [\(length failed)]: \(strJoin ' ' failed)"; - fi); + println "\(group): Failed tests [\(bad)]: \(strJoin ' ' failed)"; + fi; + bad); declare tests is hash<string, () -> boolean> -> 'a = { tests };
--- a/test/test_fvector.yeti Fri Dec 21 22:56:45 2012 +0000 +++ b/test/test_fvector.yeti Sat Dec 22 10:08:06 2012 +0000 @@ -85,17 +85,25 @@ vec.equal (vec.resizedTo 2 (vec.vector [1,2,3])) (vec.vector [1,2]); ), -"concat": \( +"concat2": \( v = vec.vector [1,2,3]; w = vec.vector [4,5,6]; - x = vec.concat v w; + x = vec.concat [v, w]; x' = vec.vector [1,2,3,4,5,6]; vec.equal x x' and (v[0] := 0; // check result is not aliasing inputs w[0] := 0; vec.equal x x') and - vec.equal x' (vec.concat x' (vec.vector [])) and - vec.equal x' (vec.concat (vec.vector []) x') + vec.equal x' (vec.concat [x', vec.vector []]) and + vec.equal x' (vec.concat [vec.vector [], x']) +), + +"concatn": \( + v = vec.vector [1,2,3]; + w = vec.vector [4,5,6]; + vec.equal (vec.concat []) (vec.zeros 0) and + vec.equal (vec.concat [v]) v and + vec.equal (vec.concat [v,w,v]) (vec.vector [1,2,3,4,5,6,1,2,3]) ), ];