<!DOCTYPE html>
<title>Geometry Interfaces: DOMMatrix and DOMMatrixReadOnly stringifier</title>
<link rel="help" href="https://drafts.fxtf.org/geometry/#DOMMatrix">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
["DOMMatrix", "DOMMatrixReadOnly", "WebKitCSSMatrix"].forEach(constr => {
  const prefix = `${constr} stringifier:`;

  // Basic
  test(() => {
    const matrix = new self[constr]();
    assert_equals(String(matrix), "matrix(1, 0, 0, 1, 0, 0)");
  }, `${prefix} identity (2d)`);

  test(() => {
    const matrix = self[constr].fromMatrix({is2D: false});
    assert_equals(String(matrix), "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)");
  }, `${prefix} identity (3d)`);

  // Non-finites
  [NaN, Infinity, -Infinity].forEach(num => {
    test(() => {
      const matrix = new self[constr]([1, 0, 0, 1, 0, num]);
      assert_throws_dom("InvalidStateError", () => String(matrix));
    }, `${prefix} ${num} (2d)`);

    test(() => {
      const matrix = new self[constr]([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, num, 0, 1]);
      assert_throws_dom("InvalidStateError", () => String(matrix));
    }, `${prefix} ${num} (3d)`);
  });

  // Precision
  [
    ['1/3', '0.3333333333333333'],
    ['1/300000', '0.0000033333333333333333'],
    ['1/300000000', '3.3333333333333334e-9'],
    ['100000 + (1/3)', '100000.33333333333'],
    ['Math.pow(2, 53) + 1', '9007199254740992'],
    ['Math.pow(2, 53) + 2', '9007199254740994'],
    ['Number.MAX_VALUE', '1.7976931348623157e+308'],
    ['Number.MIN_VALUE', '5e-324'],
  ].forEach(([input, expected]) => {
    const num = eval(input);
    test(() => {
      const matrix = new self[constr]([1, 0, 0, 1, 0, num]);
      assert_equals(String(matrix), `matrix(1, 0, 0, 1, 0, ${expected})`);
    }, `${prefix} ${input} (2d)`);

    test(() => {
      const matrix = new self[constr]([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, num, 0, 1]);
    assert_equals(String(matrix), `matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, ${expected}, 0, 1)`);
    }, `${prefix} ${input} (3d)`);
  });

  // Should not invoke getters for m11 etc
  function defineThrowingGetters(matrix) {
    Object.defineProperty(matrix, 'a', {
      get: () => assert_unreached('getter for a')
    });
    Object.defineProperty(matrix, 'm11', {
      get: () => assert_unreached('getter for m11')
    });
  }

  test(() => {
    const matrix = new self[constr]();
    defineThrowingGetters(matrix);
    assert_equals(String(matrix), "matrix(1, 0, 0, 1, 0, 0)");
  }, `${prefix} throwing getters (2d)`);

  test(() => {
    const matrix = self[constr].fromMatrix({is2D: false});
    defineThrowingGetters(matrix);
    assert_equals(String(matrix), "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)");
  }, `${prefix} throwing getters (3d)`);
});
</script>
