1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport {Vector2D, Rect2D, Bounds2D} from './geom'; 16*6dbdd20aSAndroid Build Coastguard Worker 17*6dbdd20aSAndroid Build Coastguard Workerdescribe('Vector2D', () => { 18*6dbdd20aSAndroid Build Coastguard Worker test('add', () => { 19*6dbdd20aSAndroid Build Coastguard Worker const vector1 = new Vector2D({x: 1, y: 2}); 20*6dbdd20aSAndroid Build Coastguard Worker const vector2 = new Vector2D({x: 3, y: 4}); 21*6dbdd20aSAndroid Build Coastguard Worker const result = vector1.add(vector2); 22*6dbdd20aSAndroid Build Coastguard Worker expect(result.x).toBe(4); 23*6dbdd20aSAndroid Build Coastguard Worker expect(result.y).toBe(6); 24*6dbdd20aSAndroid Build Coastguard Worker }); 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Worker test('sub', () => { 27*6dbdd20aSAndroid Build Coastguard Worker const vector1 = new Vector2D({x: 5, y: 7}); 28*6dbdd20aSAndroid Build Coastguard Worker const vector2 = new Vector2D({x: 2, y: 3}); 29*6dbdd20aSAndroid Build Coastguard Worker const result = vector1.sub(vector2); 30*6dbdd20aSAndroid Build Coastguard Worker expect(result.x).toBe(3); 31*6dbdd20aSAndroid Build Coastguard Worker expect(result.y).toBe(4); 32*6dbdd20aSAndroid Build Coastguard Worker }); 33*6dbdd20aSAndroid Build Coastguard Worker 34*6dbdd20aSAndroid Build Coastguard Worker test('scale', () => { 35*6dbdd20aSAndroid Build Coastguard Worker const vector = new Vector2D({x: 2, y: 3}); 36*6dbdd20aSAndroid Build Coastguard Worker const result = vector.scale(2); 37*6dbdd20aSAndroid Build Coastguard Worker expect(result.x).toBe(4); 38*6dbdd20aSAndroid Build Coastguard Worker expect(result.y).toBe(6); 39*6dbdd20aSAndroid Build Coastguard Worker }); 40*6dbdd20aSAndroid Build Coastguard Worker}); 41*6dbdd20aSAndroid Build Coastguard Worker 42*6dbdd20aSAndroid Build Coastguard Workerdescribe('Rect2D', () => { 43*6dbdd20aSAndroid Build Coastguard Worker test('intersect', () => { 44*6dbdd20aSAndroid Build Coastguard Worker const a = new Rect2D({left: 1, top: 1, right: 4, bottom: 4}); 45*6dbdd20aSAndroid Build Coastguard Worker const b = {left: 2, top: 2, right: 5, bottom: 5}; 46*6dbdd20aSAndroid Build Coastguard Worker const result = a.intersect(b); 47*6dbdd20aSAndroid Build Coastguard Worker expect(result).toMatchObject({left: 2, top: 2, right: 4, bottom: 4}); 48*6dbdd20aSAndroid Build Coastguard Worker // Note: Non-overlapping rects are UB and thus not tested 49*6dbdd20aSAndroid Build Coastguard Worker // TODO(stevegolton): Work out what to do here. 50*6dbdd20aSAndroid Build Coastguard Worker }); 51*6dbdd20aSAndroid Build Coastguard Worker 52*6dbdd20aSAndroid Build Coastguard Worker test('expand', () => { 53*6dbdd20aSAndroid Build Coastguard Worker const rect = new Rect2D({left: 1, top: 1, right: 3, bottom: 3}); 54*6dbdd20aSAndroid Build Coastguard Worker const result = rect.expand(1); 55*6dbdd20aSAndroid Build Coastguard Worker expect(result).toMatchObject({left: 0, top: 0, right: 4, bottom: 4}); 56*6dbdd20aSAndroid Build Coastguard Worker }); 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard Worker test('reframe', () => { 59*6dbdd20aSAndroid Build Coastguard Worker const rect = new Rect2D({left: 2, top: 2, right: 5, bottom: 5}); 60*6dbdd20aSAndroid Build Coastguard Worker const result = rect.reframe({x: 1, y: 1}); 61*6dbdd20aSAndroid Build Coastguard Worker expect(result).toMatchObject({left: 1, top: 1, right: 4, bottom: 4}); 62*6dbdd20aSAndroid Build Coastguard Worker }); 63*6dbdd20aSAndroid Build Coastguard Worker 64*6dbdd20aSAndroid Build Coastguard Worker test('size', () => { 65*6dbdd20aSAndroid Build Coastguard Worker const rect = new Rect2D({left: 1, top: 1, right: 4, bottom: 3}); 66*6dbdd20aSAndroid Build Coastguard Worker expect(rect).toMatchObject({width: 3, height: 2}); 67*6dbdd20aSAndroid Build Coastguard Worker }); 68*6dbdd20aSAndroid Build Coastguard Worker 69*6dbdd20aSAndroid Build Coastguard Worker it('translate', () => { 70*6dbdd20aSAndroid Build Coastguard Worker const rect = new Rect2D({left: 2, top: 2, right: 5, bottom: 5}); 71*6dbdd20aSAndroid Build Coastguard Worker const result = rect.translate({x: 3, y: 4}); 72*6dbdd20aSAndroid Build Coastguard Worker expect(result).toMatchObject({left: 5, top: 6, right: 8, bottom: 9}); 73*6dbdd20aSAndroid Build Coastguard Worker }); 74*6dbdd20aSAndroid Build Coastguard Worker 75*6dbdd20aSAndroid Build Coastguard Worker it('contains', () => { 76*6dbdd20aSAndroid Build Coastguard Worker const outerRect = new Rect2D({left: 0, top: 0, right: 10, bottom: 10}); 77*6dbdd20aSAndroid Build Coastguard Worker const innerRect: Bounds2D = {left: 2, top: 2, right: 8, bottom: 8}; 78*6dbdd20aSAndroid Build Coastguard Worker expect(outerRect.contains(innerRect)).toBe(true); 79*6dbdd20aSAndroid Build Coastguard Worker 80*6dbdd20aSAndroid Build Coastguard Worker const nonContainedRect: Bounds2D = {left: 2, top: 2, right: 12, bottom: 8}; 81*6dbdd20aSAndroid Build Coastguard Worker expect(outerRect.contains(nonContainedRect)).toBe(false); 82*6dbdd20aSAndroid Build Coastguard Worker }); 83*6dbdd20aSAndroid Build Coastguard Worker}); 84