<!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 highshelf 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 : 10, gain : 10 },
                            {cutoff : 1,    q : 10, gain : 10 },
                            {cutoff : 0.25, q : 10, gain : 10 },
                           ];

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

runTest();
successfullyParsed = true;

</script>

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