<!DOCTYPE html>
<html>
  <head>
    <title>
      Test Oscillator Node: sawtooth
    </title>
    <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
    <script src="../../resources/testharnessreport.js"></script>
    <script src="../resources/audit-util.js"></script>
    <script src="../resources/audit.js"></script>
    <script src="../resources/buffer-loader.js"></script>
    <script src="../resources/oscillator-testing.js"></script>
    <script src="../resources/audio-file-utils.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();
      let tester = OscillatorTestingUtils;

      audit.define('test', (task, should) => {
        let context = new OfflineAudioContext(
            1, tester.sampleRate * tester.lengthInSeconds, tester.sampleRate);

        // The thresholds are experimentally determined.
        tester.setThresholds({snr: 129.40, maxDiff: 1.9894e-6});
        tester.runTest(
            context, 'sawtooth', 'Sawtooth Oscillator with Exponential Sweep',
            task, should);
      });

      audit.run();
    </script>
  </body>
</html>
