xref: /aosp_15_r20/external/perfetto/ui/src/base/geom_unittest.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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