<!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 bandpass 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();

    // The filters we want to test.
    var filterParameters = [{cutoff : 0,    q : 0, gain : 1 },
                            {cutoff : 1,    q : 0, gain : 1 },
                            {cutoff : 0.5,  q : 0, gain : 1 },
                            {cutoff : 0.25, q : 1, gain : 1 },
                           ];

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

runTest();
successfullyParsed = true;

</script>

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