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({start: 1, end: 7}); 72 expect(map.getFramesRange({start: -1, end: 4})).toEqual({start: 1, end: 2}); 73 expect(map.getFramesRange({start: 4, end: 10})).toEqual({start: 4, end: 7}); 74 }); 75 76 it('getEntriesRange()', () => { 77 // empty 78 expect(map.getEntriesRange({start: -2, end: -1})).toEqual(undefined); 79 expect(map.getEntriesRange({start: 7, end: 8})).toEqual(undefined); 80 expect(map.getEntriesRange({start: 2, end: 4})).toEqual(undefined); 81 expect(map.getEntriesRange({start: 3, end: 2})).toEqual(undefined); 82 expect(map.getEntriesRange({start: 2, end: 2})).toEqual(undefined); 83 84 // full 85 expect(map.getEntriesRange({start: 0, end: 7})).toEqual({start: 1, end: 5}); 86 expect(map.getEntriesRange({start: -1, end: 8})).toEqual({start: 1, end: 5}); 87 88 // middle 89 expect(map.getEntriesRange({start: 1, end: 2})).toEqual({start: 1, end: 3}); 90 expect(map.getEntriesRange({start: 6, end: 7})).toEqual({start: 4, end: 5}); 91 expect(map.getEntriesRange({start: 1, end: 5})).toEqual({start: 1, end: 5}); 92 expect(map.getEntriesRange({start: 2, end: 5})).toEqual({start: 4, end: 5}); 93 expect(map.getEntriesRange({start: 1, end: 4})).toEqual({start: 1, end: 3}); 94 95 // slice away front 96 expect(map.getEntriesRange({start: 0, end: 7})).toEqual({start: 1, end: 5}); 97 expect(map.getEntriesRange({start: 1, end: 7})).toEqual({start: 1, end: 5}); 98 expect(map.getEntriesRange({start: 2, end: 7})).toEqual({start: 4, end: 5}); 99 expect(map.getEntriesRange({start: 3, end: 7})).toEqual({start: 4, end: 5}); 100 expect(map.getEntriesRange({start: 4, end: 7})).toEqual({start: 4, end: 5}); 101 expect(map.getEntriesRange({start: 5, end: 7})).toEqual({start: 4, end: 5}); 102 expect(map.getEntriesRange({start: 6, end: 7})).toEqual({start: 4, end: 5}); 103 expect(map.getEntriesRange({start: 7, end: 7})).toEqual(undefined); 104 105 // slice away back 106 expect(map.getEntriesRange({start: 1, end: 6})).toEqual({start: 1, end: 5}); 107 expect(map.getEntriesRange({start: 1, end: 5})).toEqual({start: 1, end: 5}); 108 expect(map.getEntriesRange({start: 1, end: 4})).toEqual({start: 1, end: 3}); 109 expect(map.getEntriesRange({start: 1, end: 3})).toEqual({start: 1, end: 3}); 110 expect(map.getEntriesRange({start: 1, end: 2})).toEqual({start: 1, end: 3}); 111 expect(map.getEntriesRange({start: 1, end: 1})).toEqual(undefined); 112 113 // query out of bounds 114 expect(map.getEntriesRange({start: 0, end: 8})).toEqual({start: 1, end: 5}); 115 expect(map.getEntriesRange({start: -10, end: 10})).toEqual({start: 1, end: 5}); 116 expect(map.getEntriesRange({start: -10, end: 4})).toEqual({start: 1, end: 3}); 117 expect(map.getEntriesRange({start: 2, end: 10})).toEqual({start: 4, end: 5}); 118 }); 119 120 it('getFullTraceFramesRange()', () => { 121 expect(map.getFullTraceFramesRange()).toEqual({start: 1, end: 7}); 122 }); 123}); 124