<!DOCTYPE html>
<html>
  <head>
    <title>
      Test DelayNode when maxDelayTime requires rounding
    </title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit-util.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let sampleRate = 44100;
      let inputLengthSeconds = 1;
      let renderLengthSeconds = 2;

      // Delay for one second plus 0.4 of a sample frame, to test that
      // DelayNode is properly rounding up when calculating its buffer
      // size (crbug.com/1065110).
      let delayTimeSeconds = 1 + 0.4 / sampleRate;

      let audit = Audit.createTaskRunner();

      audit.define(
          {
            label: 'maxdelay-rounding',
            description: 'Test DelayNode when maxDelayTime requires rounding',
          },
          (task, should) => {
            let context = new OfflineAudioContext({
                numberOfChannels: 1,
                length: sampleRate * renderLengthSeconds,
                sampleRate: sampleRate,
            });

            // Create a constant source to use as input.
            let src = new ConstantSourceNode(context);

            // Create a DelayNode to delay for delayTimeSeconds.
            let delay = new DelayNode(context, {
                maxDelayTime: delayTimeSeconds,
                delayTime: delayTimeSeconds,
            });

            src.connect(delay).connect(context.destination);

            src.start();
            context.startRendering()
                .then(renderedBuffer => {
                  let renderedData = renderedBuffer.getChannelData(0);

                  // The first delayTimeSeconds of output should be silent.
                  let expectedSilentFrames = Math.floor(
                      delayTimeSeconds * sampleRate);

                  should(
                      renderedData.slice(0, expectedSilentFrames),
                      `output[0:${expectedSilentFrames - 1}]`)
                      .beConstantValueOf(0);

                  // The rest should be non-silent: that is, there should
                  // be at least one non-zero sample.  (Any reasonable
                  // interpolation algorithm will make all these samples
                  // non-zero, but I don't think that's guaranteed by the
                  // spec, so we use a conservative test for now.)
                  should(
                      renderedData.slice(expectedSilentFrames),
                      `output[${expectedSilentFrames}:]`)
                      .notBeConstantValueOf(0);
                })
                .then(() => task.done());
          });

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