<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.7 $" 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="../custom/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="40" 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.7 $</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>
