Mercurial > hg > constant-q-cpp
diff yeti/test.yeti @ 65:bb1799a6d690
Pull out tests
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Fri, 14 Feb 2014 11:55:03 +0000 |
parents | 5b6c000589a7 |
children | 3d165bf186f1 |
line wrap: on
line diff
--- a/yeti/test.yeti Fri Feb 14 11:19:52 2014 +0000 +++ b/yeti/test.yeti Fri Feb 14 11:55:03 2014 +0000 @@ -1,6 +1,6 @@ program test; - +/* af = load may.stream.audiofile; plot = load may.plot; cm = load may.matrix.complex; @@ -10,10 +10,12 @@ mm = load may.mathmisc; manipulate = load may.stream.manipulate; syn = load may.stream.syntheticstream; -test = load may.test; +*/ -{ makeKernel } = load cqtkernel; -{ cqt } = load cqt; +{ runTests } = load may.test; + +//{ makeKernel } = load cqtkernel; +//{ cqt } = load cqt; // We want to test: // @@ -32,58 +34,20 @@ // // Specimen output for simple test case -// Test with a single windowed sinusoid, repeating at various frequencies +tests = [ +"kernel" : load test_cqtkernel, +"frequency" : load test_frequency, +]; -sinTestStream sampleRate duration signalFreq = // duration is in samples - (sin = syn.sinusoid sampleRate signalFreq; - chunk = mat.getRow 0 (sin.read duration); - syn.precalculatedMono sampleRate (win.windowed win.hann chunk)); +bad = sum (mapHash do name testHash: runTests name testHash done tests); -// We want to make a CQ transform spanning more than one octave, but -// not going all the way to fs/2 so we can test it also with -// frequencies above and below its extents +if (bad > 0) then + println "\n** \(bad) test(s) failed!"; + threadExit 1 +else + () +fi -sampleRate = 100; - -// fs/2 = 50 so 10->40 gives us 2 octaves -cqmin = 10; -cqmax = 40; -bpo = 4; // fairly arbitrary - -testFreqs = map (* 5) [ 0..10 ]; -duration = sampleRate * 2; - -streamBuilder = sinTestStream sampleRate duration; - -binForFreq f = - mm.round (bpo * mm.log2 (f / cqmin)) - 1; - -for testFreqs do f: - str = streamBuilder f; - cq = cqt { maxFreq = cqmax, minFreq = cqmin, binsPerOctave = bpo } str; - m = mat.concatHorizontal (map cm.magnitudes cq.output); - println "binFrequencies = \(cq.kernel.binFrequencies)"; - println "binForFreq \(f) = \(binForFreq f)"; - success = all id - (map do c: - // passes test if the correct max bin, or the expected max - // is out of range, or if all bins are below a threshold - expected = binForFreq f; - good = - (expected < 0 or expected >= vec.length c) or - (vec.max c < 0.001) or - (vec.maxindex c == binForFreq f); - if (not good) then - println " * bad! maxindex \(vec.maxindex c) != expected \(binForFreq f) for freq \(f) in column: \(vec.list c)"; -// println "matrix is:"; -// mat.print m; - else - print "✓"; - fi; - good; - done (mat.asColumns m)); - println " success = \(success) for freq \(f)"; -done; @@ -113,5 +77,5 @@ //\() (plot.plot [Contour bigM]); \() (plot.plot [Grid bigM]); */ -() +//()