<!DOCTYPE html>

<html>
<head>
<script src="resources/audio-testing.js"></script>
<script src="../resources/js-test-pre.js"></script>
<script src="resources/biquad-testing.js"></script>
</head>

<body>

<div id="description"></div>
<div id="console"></div>

<script>
description("Tests Biquad notch filter.");

function runTest() {
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }
    
    window.jsTestIsAsync = true;
        
    // Create offline audio context.
    var context = new webkitOfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);

    // Dummy filter to get filter type constant
    var f = context.createBiquadFilter();

    var filterParameters = [{cutoff : 0,    q : 10, gain : 1 },
                            {cutoff : 1,    q : 10, gain : 1 },
                            {cutoff : .5,   q :  0, gain : 1 },
                            {cutoff : 0.25, q : 10, gain : 1 },
                           ];

    createTestAndRun(context, f.NOTCH, filterParameters);
}

runTest();
successfullyParsed = true;

</script>

<script src="../resources/js-test-post.js"></script>
</body>
</html>
