Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: third_party/WebKit/LayoutTests/webaudio/resources/biquad-testing.js

Issue 2667153002: Convert BiquadFilter response tests to testharness (Closed)
Patch Set: Revert indentation. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-peaking-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Globals, to make testing and debugging easier. 1 // Globals, to make testing and debugging easier.
2 var context; 2 var context;
3 var filter; 3 var filter;
4 var signal; 4 var signal;
5 var renderedBuffer; 5 var renderedBuffer;
6 var renderedData; 6 var renderedData;
7 7
8 var sampleRate = 44100.0; 8 var sampleRate = 44100.0;
9 var pulseLengthFrames = .1 * sampleRate; 9 var pulseLengthFrames = .1 * sampleRate;
10 10
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 filter[k].detune.value = (filterParameters[k].detune === undefined) ? 0 : filterParameters[k].detune; 69 filter[k].detune.value = (filterParameters[k].detune === undefined) ? 0 : filterParameters[k].detune;
70 filter[k].Q.value = filterParameters[k].q; 70 filter[k].Q.value = filterParameters[k].q;
71 filter[k].gain.value = filterParameters[k].gain; 71 filter[k].gain.value = filterParameters[k].gain;
72 72
73 signal[k].connect(filter[k]); 73 signal[k].connect(filter[k]);
74 filter[k].connect(context.destination); 74 filter[k].connect(context.destination);
75 75
76 signal[k].start(timeStep * k); 76 signal[k].start(timeStep * k);
77 } 77 }
78 78
79 context.oncomplete = checkFilterResponse(filterType, testParameters); 79 return context.startRendering()
80 context.startRendering(); 80 .then(buffer => {
81 checkFilterResponse(filterType, testParameters)(buffer);
hongchan 2017/02/01 18:18:47 This looks a bit off. I know it's a valid expressi
Raymond Toy 2017/02/01 19:08:53 Yeah, this can be fixed. I was going for minimal c
82 });
81 } 83 }
82 84
83 function addSignal(dest, src, destOffset) { 85 function addSignal(dest, src, destOffset) {
84 // Add src to dest at the given dest offset. 86 // Add src to dest at the given dest offset.
85 for (var k = destOffset, j = 0; k < dest.length, j < src.length; ++k, ++j) { 87 for (var k = destOffset, j = 0; k < dest.length, j < src.length; ++k, ++j) {
86 dest[k] += src[j]; 88 dest[k] += src[j];
87 } 89 }
88 } 90 }
89 91
90 function generateReference(filterType, filterParameters) { 92 function generateReference(filterType, filterParameters) {
(...skipping 19 matching lines...) Expand all
110 var y = filterData(filterCoef, data, renderLengthSamples); 112 var y = filterData(filterCoef, data, renderLengthSamples);
111 113
112 // Accumulate this filtered data into the final output at the desired of fset. 114 // Accumulate this filtered data into the final output at the desired of fset.
113 addSignal(result, y, timeToSampleFrame(timeStep * k, sampleRate)); 115 addSignal(result, y, timeToSampleFrame(timeStep * k, sampleRate));
114 } 116 }
115 117
116 return result; 118 return result;
117 } 119 }
118 120
119 function checkFilterResponse(filterType, testParameters) { 121 function checkFilterResponse(filterType, testParameters) {
120 return function(event) { 122 return function(renderedBuffer) {
121 var filterParameters = testParameters.filterParameters; 123 var filterParameters = testParameters.filterParameters;
122 var maxAllowedError = testParameters.threshold; 124 var maxAllowedError = testParameters.threshold;
123 renderedBuffer = event.renderedBuffer; 125 let should = testParameters.should;
126
124 renderedData = renderedBuffer.getChannelData(0); 127 renderedData = renderedBuffer.getChannelData(0);
125 128
126 reference = generateReference(filterType, filterParameters); 129 reference = generateReference(filterType, filterParameters);
127 130
128 var len = Math.min(renderedData.length, reference.length); 131 var len = Math.min(renderedData.length, reference.length);
129 132
130 var success = true; 133 var success = true;
131 134
132 // Maximum error between rendered data and expected data 135 // Maximum error between rendered data and expected data
133 var maxError = 0; 136 var maxError = 0;
134 137
135 // Sample offset where the maximum error occurred. 138 // Sample offset where the maximum error occurred.
136 var maxPosition = 0; 139 var maxPosition = 0;
137 140
138 // Number of infinities or NaNs that occurred in the rendered data. 141 // Number of infinities or NaNs that occurred in the rendered data.
139 var invalidNumberCount = 0; 142 var invalidNumberCount = 0;
140 143
141 if (nFilters != filterParameters.length) { 144 should(nFilters, "Number of filters tested")
142 testFailed("Test wanted " + filterParameters.length + " filters but only " + maxFilters + " allowed."); 145 .beEqualTo(filterParameters.length);
143 success = false;
144 }
145 146
146 // Compare the rendered signal with our reference, keeping 147 // Compare the rendered signal with our reference, keeping
147 // track of the maximum difference (and the offset of the max 148 // track of the maximum difference (and the offset of the max
148 // difference.) Check for bad numbers in the rendered output 149 // difference.) Check for bad numbers in the rendered output
149 // too. There shouldn't be any. 150 // too. There shouldn't be any.
150 for (var k = 0; k < len; ++k) { 151 for (var k = 0; k < len; ++k) {
151 var err = Math.abs(renderedData[k] - reference[k]); 152 var err = Math.abs(renderedData[k] - reference[k]);
152 if (err > maxError) { 153 if (err > maxError) {
153 maxError = err; 154 maxError = err;
154 maxPosition = k; 155 maxPosition = k;
155 } 156 }
156 if (!isValidNumber(renderedData[k])) { 157 if (!isValidNumber(renderedData[k])) {
157 ++invalidNumberCount; 158 ++invalidNumberCount;
158 } 159 }
159 } 160 }
160 161
161 if (invalidNumberCount > 0) { 162 should(invalidNumberCount,
162 testFailed("Rendered output has " + invalidNumberCount + " infinitie s or NaNs."); 163 "Number of non-finite values in the rendered output")
163 success = false; 164 .beEqualTo(0);
164 } else { 165
165 testPassed("Rendered output did not have infinities or NaNs."); 166 should(maxError,
166 } 167 "Max error in " + filterTypeName[filterType] + " response")
167 168 .beLessThanOrEqualTo(maxAllowedError);
168 if (maxError <= maxAllowedError) {
169 testPassed(filterTypeName[filterType] + " response is correct.");
170 } else {
171 testFailed(filterTypeName[filterType] + " response is incorrect. Ma x err = " + maxError + " at " + maxPosition + ". Threshold = " + maxAllowedErro r);
172 success = false;
173 }
174
175 if (success) {
176 testPassed("Test signal was correctly filtered.");
177 } else {
178 testFailed("Test signal was not correctly filtered.");
179 }
180 finishJSTest();
181 } 169 }
182 } 170 }
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/webaudio/BiquadFilter/biquad-peaking-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698