<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="loaded()">
  <!-- Big green background to match lime.svg -->
  <rect width="100%" height="100%" fill="lime"/>
  <!-- Red "workspace" (should be covered up, if tests pass) -->
  <rect x="100" y="100" width="100" height="100" fill="red"/>

  <!-- FIRST ROW -->
  <!-- Check that 'from' gets applied at begin time -->
  <rect fill="lime" x="0" y="0" width="50" height="50">
    <animateMotion from="100, 100" to="500, 500" begin="1" dur="1"/>
  </rect>

  <!-- Check that 'to' gets hit at end time -->
  <rect fill="lime" x="0" y="0" width="50" height="50">
    <animateMotion from="200,200" to="150,100" begin="0" dur="1" fill="freeze"/>
  </rect>

  <!-- SECOND ROW -->
  <!-- Check that animation effects are removed after end time
       (note that fill="remove" is default; just specifying it for clarity -->
  <rect fill="lime" x="100" y="150" width="50" height="50">
    <animateMotion from="500,500" to="600,600" begin="0" dur="1" fill="remove"/>
  </rect>
  <rect fill="purple" x="-25" y="-25" width="25" height="25">
    <!-- With the purple rect's x/y offsets, this animateMotion path moves us
         around the 2nd row, 1st col -->
    <animateMotion from="125,175" to="150,175" begin="0" dur="1" fill="remove"/>
  </rect>

  <!-- Check interpolation halfway through animation -->
  <rect fill="lime" width="50" height="50">
    <animateMotion from="200,100" to="100,200" begin="0.5" dur="1"/>
  </rect>

<script>
if (window.testRunner)
    testRunner.waitUntilDone();

function loaded() {
    document.documentElement.setCurrentTime(1);
    document.documentElement.pauseAnimations();

    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</svg>
