quad_test.html revision 4a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724
1<!DOCTYPE html>
2<!--
3Copyright (c) 2014 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7<link rel="import" href="/tracing/base/rect.html">
8<link rel="import" href="/tracing/base/quad.html">
9<script>
10'use strict';
11
12function assertQuadEquals(a, b, opt_message) {
13  var ok = true;
14  ok &= a.p1[0] === b.p1[0] && a.p1[1] === b.p1[1];
15  ok &= a.p2[0] === b.p2[0] && a.p2[1] === b.p2[1];
16  ok &= a.p3[0] === b.p3[0] && a.p3[1] === b.p3[1];
17  ok &= a.p4[0] === b.p4[0] && a.p4[1] === b.p4[1];
18  if (ok)
19    return;
20  var message = opt_message || 'Expected "' + a.toString() +
21      '", got "' + b.toString() + '"';
22  throw new tr.b.unittest.TestError(message);
23}
24
25tr.b.unittest.testSuite(function() {
26  test('pointInTri', function() {
27    var res = tr.b.pointInTriangle2(
28        [0.25, 0.25],
29        [0, 0],
30        [1, 0],
31        [0, 1]);
32    assert.isTrue(res);
33  });
34
35  test('pointNotInTri', function() {
36    var res = tr.b.pointInTriangle2(
37        [0.75, 0.75],
38        [0, 0],
39        [1, 0],
40        [0, 1]);
41    assert.isFalse(res);
42  });
43
44  test('pointInside', function() {
45    var q = tr.b.Quad.from4Vecs([0, 0],
46                                [1, 0],
47                                [1, 1],
48                                [0, 1]);
49    var res = q.pointInside([0.5, 0.5]);
50    assert.isTrue(res);
51  });
52
53  test('pointNotInQuad', function() {
54    var q = tr.b.Quad.from4Vecs([0, 0],
55                                [1, 0],
56                                [1, 1],
57                                [0, 1]);
58    var res = q.pointInside([1.5, 0.5]);
59    assert.isFalse(res);
60  });
61
62  test('isRectangle', function() {
63    assert.isTrue(tr.b.Quad.fromXYWH(0, 0, 10, 10).isRectangle());
64    assert.isTrue(tr.b.Quad.fromXYWH(-10, -10, 5, 5).isRectangle());
65    assert.isTrue(tr.b.Quad.fromXYWH(-10, -10, 20, 20).isRectangle());
66    assert.isTrue(tr.b.Quad.fromXYWH(-10, 10, 5, 5).isRectangle());
67
68    assert.isFalse(tr.b.Quad.fromXYWH(0, 0, -10, -10).isRectangle());
69    assert.isFalse(
70        tr.b.Quad.from8Array([0, 1, 2, 3, 4, 5, 6, 7]).isRectangle());
71    assert.isFalse(
72        tr.b.Quad.from8Array([0, 0, 0, 5, 5, 5, 0, 0]).isRectangle());
73  });
74
75  test('projectUnitRect', function() {
76    var container = tr.b.Quad.fromXYWH(0, 0, 10, 10);
77    var srcRect = tr.b.Rect.fromXYWH(0.1, 0.8, 0.8, 0.1);
78    var expectedRect = srcRect.scale(10);
79
80    var q = new tr.b.Quad();
81    container.projectUnitRectFast(q, srcRect);
82
83    assertQuadEquals(tr.b.Quad.fromRect(expectedRect), q);
84  });
85
86  test('projectUnitRectOntoUnitQuad', function() {
87    var container = tr.b.Quad.fromXYWH(0, 0, 1, 1);
88    var srcRect = tr.b.Rect.fromXYWH(0.0, 0, 1, 1);
89    var expectedRect = srcRect;
90
91    var q = new tr.b.Quad();
92    container.projectUnitRectFast(q, srcRect);
93
94    assertQuadEquals(tr.b.Quad.fromRect(expectedRect), q);
95  });
96
97  test('projectUnitRectOntoSizeTwoQuad', function() {
98    var container = tr.b.Quad.fromXYWH(0, 0, 2, 2);
99    var srcRect = tr.b.Rect.fromXYWH(0.0, 0, 1, 1);
100    var expectedRect = srcRect.scale(2);
101
102    var q = new tr.b.Quad();
103    container.projectUnitRectFast(q, srcRect);
104
105    assertQuadEquals(tr.b.Quad.fromRect(expectedRect), q);
106  });
107
108  test('projectUnitRectOntoTranslatedQuad', function() {
109    var container = tr.b.Quad.fromXYWH(1, 1, 1, 1);
110    var srcRect = tr.b.Rect.fromXYWH(0.0, 0, 1, 1);
111    var expectedRect = srcRect.translate([1, 1]);
112
113    var q = new tr.b.Quad();
114    container.projectUnitRectFast(q, srcRect);
115
116    assertQuadEquals(tr.b.Quad.fromRect(expectedRect), q);
117  });
118
119  test('projectShrunkUnitRectOntoUnitQuad', function() {
120    var container = tr.b.Quad.fromXYWH(0, 0, 1, 1);
121    var srcRect = tr.b.Rect.fromXYWH(0.1, 0.1, 0.8, 0.8);
122    var expectedRect = srcRect;
123
124    var q = new tr.b.Quad();
125    container.projectUnitRectFast(q, srcRect);
126
127    assertQuadEquals(tr.b.Quad.fromRect(expectedRect), q);
128  });
129});
130</script>
131