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