<svg id="svg-root" width="100%" height="100%" 
  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg" 
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <!--======================================================================-->
  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
  <!--=  Institute of Technology, European Research Consortium for         =-->
  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
  <!--=  All Rights Reserved.                                              =-->
  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
  <!--======================================================================-->
  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
    template-version="1.4" reviewer="CM" author="ED" status="accepted"
    version="$Revision: 1.8 $" testname="$RCSfile: coords-dom-01-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/coords.html#DOMInterfaces">
      <p>
        Tests the liveness of SVGTransform.matrix.
      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Load the svg, you should see a green circle.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        The test has passed if:
      </p>
      <ul>
        <li>There is no red visible</li>
        <li>There is a green circle visible</li>
      </ul>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: coords-dom-01-f.svg,v $</title>
  <defs>
    <font-face
      font-family="SVGFreeSansASCII"
      unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
    
    
    <g transform="translate(240 180)">
      <g id="reference">
        <circle r="40" fill="red"/>
      </g>
    
      <g id="g" transform="translate(20 20)">
        <circle id="c" r="41" fill="blue"/>
      </g>
    </g>   
    
    <script type="text/ecmascript"><![CDATA[
      var eps = 1 / 65535; // 16.16 fixpoint epsilon
      var passed = false;
      
      function isequal( value, expected, epsilon )
      {
        return(Math.abs(value - expected) < epsilon);
      }
 
      try
      {
        var g = document.getElementById("g");
        var c = document.getElementById("c");
        var tfm = g.transform.baseVal.getItem(0);
        var mtx = tfm.matrix;
        tfm.setTranslate(300,200);
        if(tfm.type == SVGTransform.SVG_TRANSFORM_TRANSLATE &&
           isequal(mtx.e, 300, eps) && isequal(mtx.f, 200, eps))
        {
          tfm.setScale(4,4);
          if(tfm.type == SVGTransform.SVG_TRANSFORM_SCALE &&
             isequal(mtx.a, 4, eps) && isequal(mtx.d, 4, eps))
          {
            tfm.setRotate(90,0,0);
            if(tfm.type == SVGTransform.SVG_TRANSFORM_ROTATE &&
               isequal(mtx.a, Math.cos(Math.PI/2), eps) && isequal(mtx.b, Math.sin(Math.PI/2), eps) &&
               isequal(mtx.c, -Math.sin(Math.PI/2), eps) && isequal(mtx.d, Math.cos(Math.PI/2), eps) &&
               isequal(mtx.e, 0, eps) && isequal(mtx.f, 0, eps))
            {
              passed = true;
            }
          }
        }
      }
      catch(e) {}
      
      if(passed)
      {
        c.setAttribute("fill", "lime");
      }
      else
      {
        c.setAttribute("fill", "red");
      }
    ]]></script>
        
  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
  <text id="revision" x="10" y="340" stroke="none" 
    fill="black">$Revision: 1.8 $</text>
  </g>
  <rect xml:id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
  <!-- comment out this watermark once the test is approved --><!--
  <g id="draft-watermark">
    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240" 
      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
  </g>-->
</svg>
