• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2023 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import {FrameMap} from './frame_map';
18import {FrameMapBuilder} from './frame_map_builder';
19
20describe('FrameMapTest', () => {
21  let map: FrameMap;
22
23  beforeAll(() => {
24    // Entry: 0   1-2    3    4    5
25    //             |          |
26    //             |          |
27    // Frame:      1  2  3  4-5-6
28    map = new FrameMapBuilder(5, 7)
29      .setFrames(1, {start: 1, end: 2})
30      .setFrames(2, {start: 1, end: 2})
31      .setFrames(4, {start: 4, end: 7})
32      .build();
33  });
34
35  it('getFramesRange()', () => {
36    // empty
37    expect(map.getFramesRange({start: -2, end: -1})).toEqual(undefined);
38    expect(map.getFramesRange({start: 0, end: 1})).toEqual(undefined);
39    expect(map.getFramesRange({start: 5, end: 6})).toEqual(undefined);
40    expect(map.getFramesRange({start: 1, end: 1})).toEqual(undefined);
41
42    // full
43    expect(map.getFramesRange({start: 0, end: 6})).toEqual({start: 1, end: 7});
44    expect(map.getFramesRange({start: 1, end: 5})).toEqual({start: 1, end: 7});
45
46    // middle
47    expect(map.getFramesRange({start: 1, end: 4})).toEqual({start: 1, end: 2});
48    expect(map.getFramesRange({start: 1, end: 2})).toEqual({start: 1, end: 2});
49    expect(map.getFramesRange({start: 2, end: 3})).toEqual({start: 1, end: 2});
50    expect(map.getFramesRange({start: 3, end: 4})).toEqual(undefined);
51    expect(map.getFramesRange({start: 4, end: 5})).toEqual({start: 4, end: 7});
52
53    // slice away front
54    expect(map.getFramesRange({start: 1, end: 6})).toEqual({start: 1, end: 7});
55    expect(map.getFramesRange({start: 2, end: 6})).toEqual({start: 1, end: 7});
56    expect(map.getFramesRange({start: 3, end: 6})).toEqual({start: 4, end: 7});
57    expect(map.getFramesRange({start: 4, end: 6})).toEqual({start: 4, end: 7});
58    expect(map.getFramesRange({start: 5, end: 6})).toEqual(undefined);
59    expect(map.getFramesRange({start: 6, end: 6})).toEqual(undefined);
60
61    // slice away back
62    expect(map.getFramesRange({start: 0, end: 5})).toEqual({start: 1, end: 7});
63    expect(map.getFramesRange({start: 0, end: 4})).toEqual({start: 1, end: 2});
64    expect(map.getFramesRange({start: 0, end: 3})).toEqual({start: 1, end: 2});
65    expect(map.getFramesRange({start: 0, end: 2})).toEqual({start: 1, end: 2});
66    expect(map.getFramesRange({start: 0, end: 1})).toEqual(undefined);
67    expect(map.getFramesRange({start: 0, end: 0})).toEqual(undefined);
68
69    // query out of bounds
70    expect(map.getFramesRange({start: -1, end: 7})).toEqual({start: 1, end: 7});
71    expect(map.getFramesRange({start: -10, end: 10})).toEqual({
72      start: 1,
73      end: 7,
74    });
75    expect(map.getFramesRange({start: -1, end: 4})).toEqual({start: 1, end: 2});
76    expect(map.getFramesRange({start: 4, end: 10})).toEqual({start: 4, end: 7});
77  });
78
79  it('getEntriesRange()', () => {
80    // empty
81    expect(map.getEntriesRange({start: -2, end: -1})).toEqual(undefined);
82    expect(map.getEntriesRange({start: 7, end: 8})).toEqual(undefined);
83    expect(map.getEntriesRange({start: 2, end: 4})).toEqual(undefined);
84    expect(map.getEntriesRange({start: 3, end: 2})).toEqual(undefined);
85    expect(map.getEntriesRange({start: 2, end: 2})).toEqual(undefined);
86
87    // full
88    expect(map.getEntriesRange({start: 0, end: 7})).toEqual({start: 1, end: 5});
89    expect(map.getEntriesRange({start: -1, end: 8})).toEqual({
90      start: 1,
91      end: 5,
92    });
93
94    // middle
95    expect(map.getEntriesRange({start: 1, end: 2})).toEqual({start: 1, end: 3});
96    expect(map.getEntriesRange({start: 6, end: 7})).toEqual({start: 4, end: 5});
97    expect(map.getEntriesRange({start: 1, end: 5})).toEqual({start: 1, end: 5});
98    expect(map.getEntriesRange({start: 2, end: 5})).toEqual({start: 4, end: 5});
99    expect(map.getEntriesRange({start: 1, end: 4})).toEqual({start: 1, end: 3});
100
101    // slice away front
102    expect(map.getEntriesRange({start: 0, end: 7})).toEqual({start: 1, end: 5});
103    expect(map.getEntriesRange({start: 1, end: 7})).toEqual({start: 1, end: 5});
104    expect(map.getEntriesRange({start: 2, end: 7})).toEqual({start: 4, end: 5});
105    expect(map.getEntriesRange({start: 3, end: 7})).toEqual({start: 4, end: 5});
106    expect(map.getEntriesRange({start: 4, end: 7})).toEqual({start: 4, end: 5});
107    expect(map.getEntriesRange({start: 5, end: 7})).toEqual({start: 4, end: 5});
108    expect(map.getEntriesRange({start: 6, end: 7})).toEqual({start: 4, end: 5});
109    expect(map.getEntriesRange({start: 7, end: 7})).toEqual(undefined);
110
111    // slice away back
112    expect(map.getEntriesRange({start: 1, end: 6})).toEqual({start: 1, end: 5});
113    expect(map.getEntriesRange({start: 1, end: 5})).toEqual({start: 1, end: 5});
114    expect(map.getEntriesRange({start: 1, end: 4})).toEqual({start: 1, end: 3});
115    expect(map.getEntriesRange({start: 1, end: 3})).toEqual({start: 1, end: 3});
116    expect(map.getEntriesRange({start: 1, end: 2})).toEqual({start: 1, end: 3});
117    expect(map.getEntriesRange({start: 1, end: 1})).toEqual(undefined);
118
119    // query out of bounds
120    expect(map.getEntriesRange({start: 0, end: 8})).toEqual({start: 1, end: 5});
121    expect(map.getEntriesRange({start: -10, end: 10})).toEqual({
122      start: 1,
123      end: 5,
124    });
125    expect(map.getEntriesRange({start: -10, end: 4})).toEqual({
126      start: 1,
127      end: 3,
128    });
129    expect(map.getEntriesRange({start: 2, end: 10})).toEqual({
130      start: 4,
131      end: 5,
132    });
133  });
134
135  it('getFullTraceFramesRange()', () => {
136    expect(map.getFullTraceFramesRange()).toEqual({start: 1, end: 7});
137  });
138});
139