sorted_array_utils_test.html revision 4a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724
1<!DOCTYPE html> 2<!-- 3Copyright (c) 2014 The Chromium Authors. All rights reserved. 4Use of this source code is governed by a BSD-style license that can be 5found in the LICENSE file. 6--> 7<link rel="import" href="/tracing/base/sorted_array_utils.html"> 8<script> 9'use strict'; 10 11tr.b.unittest.testSuite(function() { 12 var ArrayOfIntervals = function(array) { 13 this.array = array; 14 } 15 16 ArrayOfIntervals.prototype = { 17 18 get: function(index) { 19 return this.array[index]; 20 }, 21 22 findLowElementIndex: function(ts) { 23 return tr.b.findLowIndexInSortedArray( 24 this.array, 25 function(x) { return x.lo; }, 26 ts); 27 }, 28 29 findIntervalIndex: function(ts) { 30 return tr.b.findIndexInSortedIntervals( 31 this.array, 32 function(x) { return x.lo; }, 33 function(x) { return x.hi - x.lo; }, 34 ts); 35 }, 36 37 findIndexInClosedIntervals: function(ts) { 38 return tr.b.findIndexInSortedClosedIntervals( 39 this.array, 40 function(x) { return x.lo; }, 41 function(x) { return x.hi; }, 42 ts); 43 }, 44 45 findIntersectingIntervals: function(tsA, tsB) { 46 var array = this.array; 47 var result = []; 48 tr.b.iterateOverIntersectingIntervals( 49 this.array, 50 function(x) { return x.lo; }, 51 function(x) { return x.hi - x.lo; }, 52 tsA, 53 tsB, 54 function(x) { result.push(array.indexOf(x)); }); 55 return result; 56 }, 57 58 findClosestElement: function(ts, tsDiff) { 59 return tr.b.findClosestElementInSortedArray( 60 this.array, 61 function(x) { return x.lo; }, 62 ts, 63 tsDiff); 64 }, 65 66 findClosestInterval: function(ts, tsDiff) { 67 return tr.b.findClosestIntervalInSortedIntervals( 68 this.array, 69 function(x) { return x.lo; }, 70 function(x) { return x.hi; }, 71 ts, 72 tsDiff); 73 } 74 }; 75 76 test('findLowElementIndex', function() { 77 var array = new ArrayOfIntervals([ 78 {lo: 10, hi: 15}, 79 {lo: 20, hi: 30} 80 ]); 81 82 assert.equal(array.findLowElementIndex(-100), 0); 83 assert.equal(array.findLowElementIndex(0), 0); 84 assert.equal(array.findLowElementIndex(10), 0); 85 86 assert.equal(array.findLowElementIndex(10.1), 1); 87 assert.equal(array.findLowElementIndex(15), 1); 88 assert.equal(array.findLowElementIndex(20), 1); 89 90 assert.equal(array.findLowElementIndex(20.1), 2); 91 assert.equal(array.findLowElementIndex(21), 2); 92 assert.equal(array.findLowElementIndex(100), 2); 93 }); 94 95 test('findIntervalIndex', function() { 96 var array = new ArrayOfIntervals([ 97 {lo: 10, hi: 15}, 98 {lo: 20, hi: 30} 99 ]); 100 101 assert.equal(array.findIntervalIndex(0), -1); 102 assert.equal(array.findIntervalIndex(9.9), -1); 103 104 assert.equal(array.findIntervalIndex(10), 0); 105 assert.equal(array.findIntervalIndex(12), 0); 106 assert.equal(array.findIntervalIndex(14.9), 0); 107 108 assert.equal(array.findIntervalIndex(20), 1); 109 assert.equal(array.findIntervalIndex(21), 1); 110 assert.equal(array.findIntervalIndex(29.99), 1); 111 112 assert.equal(array.findIntervalIndex(30), 2); 113 assert.equal(array.findIntervalIndex(40), 2); 114 115 116 // misses, in between the intervals, return array length 117 assert.equal(array.findIntervalIndex(15), 2); 118 assert.equal(array.findIntervalIndex(19.9), 2); 119 }); 120 121 test('findClosedIntervalIndex', function() { 122 var array = new ArrayOfIntervals([ 123 {lo: 10, hi: 15}, 124 {lo: 15, hi: 20}, 125 {lo: 21, hi: 25} 126 ]); 127 128 assert.equal(array.findIndexInClosedIntervals(0), -1); 129 assert.equal(array.findIndexInClosedIntervals(9.999), -1); 130 assert.equal(array.findIndexInClosedIntervals(10), 0); 131 assert.equal(array.findIndexInClosedIntervals(14), 0); 132 assert.equal(array.findIndexInClosedIntervals(15), 0); 133 assert.equal(array.findIndexInClosedIntervals(15.00001), 1); 134 assert.equal(array.findIndexInClosedIntervals(20.5), 3); 135 assert.equal(array.findIndexInClosedIntervals(22), 2); 136 assert.equal(array.findIndexInClosedIntervals(25), 2); 137 assert.equal(array.findIndexInClosedIntervals(25.00001), 3); 138 }); 139 140 test('findClosedInEmptyArray', function() { 141 var array = new ArrayOfIntervals([]); 142 assert.equal(array.findIndexInClosedIntervals(0), 0); 143 }); 144 145 test('findIntersectingIntervals', function() { 146 var array = new ArrayOfIntervals([ 147 {lo: 10, hi: 15}, 148 {lo: 20, hi: 30} 149 ]); 150 151 assert.deepEqual(array.findIntersectingIntervals(0, 0), []); 152 assert.deepEqual(array.findIntersectingIntervals(100, 0), []); 153 assert.deepEqual(array.findIntersectingIntervals(0, 10), []); 154 155 assert.deepEqual(array.findIntersectingIntervals(0, 10.1), [0]); 156 assert.deepEqual(array.findIntersectingIntervals(5, 15), [0]); 157 assert.deepEqual(array.findIntersectingIntervals(15, 20), [0]); 158 159 assert.deepEqual(array.findIntersectingIntervals(15.1, 20), []); 160 161 assert.deepEqual(array.findIntersectingIntervals(15.1, 20.1), [1]); 162 assert.deepEqual(array.findIntersectingIntervals(20, 30), [1]); 163 assert.deepEqual(array.findIntersectingIntervals(30, 100), [1]); 164 165 assert.deepEqual(array.findIntersectingIntervals(0, 100), [0, 1]); 166 assert.deepEqual(array.findIntersectingIntervals(15, 20.1), [0, 1]); 167 }); 168 169 test('findClosestElement', function() { 170 var array = new ArrayOfIntervals([ 171 {lo: 10, hi: 15}, 172 {lo: 20, hi: 30} 173 ]); 174 175 // Test the helper method first. 176 assert.isUndefined(array.get(-1)); 177 assert.equal(array.get(0), array.array[0]); 178 assert.equal(array.get(1), array.array[1]); 179 assert.isUndefined(array.get(2)); 180 181 assert.isNull(array.findClosestElement(0, 0)); 182 assert.isNull(array.findClosestElement(0, 9.9)); 183 assert.isNull(array.findClosestElement(10, -10)); 184 185 assert.equal(array.get(0), array.findClosestElement(0, 10)); 186 assert.equal(array.get(0), array.findClosestElement(8, 5)); 187 assert.equal(array.get(0), array.findClosestElement(10, 0)); 188 assert.equal(array.get(0), array.findClosestElement(12, 2)); 189 190 assert.isNull(array.findClosestElement(15, 3)); 191 assert.isNotNull(array.findClosestElement(15, 5)); 192 193 assert.equal(array.get(1), array.findClosestElement(19, 1)); 194 assert.equal(array.get(1), array.findClosestElement(20, 0)); 195 assert.equal(array.get(1), array.findClosestElement(30, 15)); 196 197 assert.isNull(array.findClosestElement(30, 9.9)); 198 assert.isNull(array.findClosestElement(100, 50)); 199 }); 200 201 test('findClosestInterval', function() { 202 var array = new ArrayOfIntervals([ 203 {lo: 10, hi: 15}, 204 {lo: 20, hi: 30} 205 ]); 206 207 assert.isNull(array.findClosestInterval(0, 0)); 208 assert.isNull(array.findClosestInterval(0, 9.9)); 209 assert.isNull(array.findClosestInterval(0, -100)); 210 211 assert.equal(array.get(0), array.findClosestInterval(0, 10)); 212 assert.equal(array.get(0), array.findClosestInterval(10, 0)); 213 assert.equal(array.get(0), array.findClosestInterval(12, 3)); 214 assert.equal(array.get(0), array.findClosestInterval(12, 100)); 215 216 assert.equal(array.get(0), array.findClosestInterval(13, 3)); 217 assert.equal(array.get(0), array.findClosestInterval(13, 20)); 218 assert.equal(array.get(0), array.findClosestInterval(15, 0)); 219 220 assert.isNull(array.findClosestInterval(17.5, 0)); 221 assert.isNull(array.findClosestInterval(17.5, 2.4)); 222 assert.isNotNull(array.findClosestInterval(17.5, 2.5)); 223 assert.isNotNull(array.findClosestInterval(17.5, 10)); 224 225 assert.equal(array.get(1), array.findClosestInterval(19, 2)); 226 assert.equal(array.get(1), array.findClosestInterval(20, 0)); 227 assert.equal(array.get(1), array.findClosestInterval(24, 100)); 228 assert.equal(array.get(1), array.findClosestInterval(26, 100)); 229 230 assert.equal(array.get(1), array.findClosestInterval(30, 0)); 231 assert.equal(array.get(1), array.findClosestInterval(35, 10)); 232 assert.equal(array.get(1), array.findClosestInterval(50, 100)); 233 234 assert.isNull(array.findClosestInterval(50, 19)); 235 assert.isNull(array.findClosestInterval(100, 50)); 236 assert.isNull(array.findClosestInterval(50, -100)); 237 }); 238}); 239</script> 240