<!doctype html>
<html>
<meta charset="utf-8">
<title>Test for animation freeze when repeatDur is not a multiple of dur</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/SVGAnimationTestCase-testharness.js"></script>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <rect width="50" height="50" x="0" y="0" fill="green">
    <animateMotion id="anim" to="100,0" begin="0s" dur="4s" fill="remove" />
  </rect>
</svg>

<script>
var rootSVGElement = document.querySelector("svg");
var epsilon = 1.0;

// Setup animation test
function sample1() {
    assert_approx_equals(rootSVGElement.getBBox().x, 0, epsilon);
}

function sample2() {
    assert_approx_equals(rootSVGElement.getBBox().x, 50, epsilon);
}

function sample3() {
    assert_approx_equals(rootSVGElement.getBBox().x, 0, epsilon);
}

function sample4() {
    assert_approx_equals(rootSVGElement.getBBox().x, 0, epsilon);
}

smil_async_test((t) => {
    var rects = rootSVGElement.ownerDocument.getElementsByTagName("rect");
    rect1 = rects[0];

    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["anim", 0.0,   sample1],
        ["anim", 2.0,   sample2],
        ["anim", 4.0,   sample3],
        ["anim", 6.0,   sample4]
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>