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