1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 base.require('base.sorted_array_utils');
9 base.unittest.testSuite('base.sorted_array_utils', function() {
10 var ArrayOfIntervals = function(array) {
14 ArrayOfIntervals.prototype = {
16 get: function(index) {
17 return this.array[index];
20 findLowElementIndex: function(ts) {
21 return base.findLowIndexInSortedArray(
23 function(x) { return x.lo; },
27 findLowIntervalIndex: function(ts) {
28 return base.findLowIndexInSortedIntervals(
30 function(x) { return x.lo; },
31 function(x) { return x.hi - x.lo; },
35 findIntersectingIntervals: function(tsA, tsB) {
36 var array = this.array;
38 base.iterateOverIntersectingIntervals(
40 function(x) { return x.lo; },
41 function(x) { return x.hi - x.lo; },
44 function(x) { result.push(array.indexOf(x)); });
48 findClosestElement: function(ts, tsDiff) {
49 return base.findClosestElementInSortedArray(
51 function(x) { return x.lo; },
56 findClosestInterval: function(ts, tsDiff) {
57 return base.findClosestIntervalInSortedIntervals(
59 function(x) { return x.lo; },
60 function(x) { return x.hi; },
66 test('findLowElementIndex', function() {
67 var array = new ArrayOfIntervals([
72 assertEquals(0, array.findLowElementIndex(-100));
73 assertEquals(0, array.findLowElementIndex(0));
74 assertEquals(0, array.findLowElementIndex(10));
76 assertEquals(1, array.findLowElementIndex(10.1));
77 assertEquals(1, array.findLowElementIndex(15));
78 assertEquals(1, array.findLowElementIndex(20));
80 assertEquals(2, array.findLowElementIndex(20.1));
81 assertEquals(2, array.findLowElementIndex(21));
82 assertEquals(2, array.findLowElementIndex(100));
85 test('findLowIntervalIndex', function() {
86 var array = new ArrayOfIntervals([
91 assertEquals(-1, array.findLowIntervalIndex(0));
92 assertEquals(-1, array.findLowIntervalIndex(9.9));
94 assertEquals(0, array.findLowIntervalIndex(10));
95 assertEquals(0, array.findLowIntervalIndex(12));
96 assertEquals(0, array.findLowIntervalIndex(14.9));
98 // These two are a little odd... the return is correct in that
99 // it was not found, but its neither below, nor above. Whatever.
100 assertEquals(2, array.findLowIntervalIndex(15));
101 assertEquals(2, array.findLowIntervalIndex(19.9));
103 assertEquals(1, array.findLowIntervalIndex(20));
104 assertEquals(1, array.findLowIntervalIndex(21));
105 assertEquals(1, array.findLowIntervalIndex(29.99));
107 assertEquals(2, array.findLowIntervalIndex(30));
108 assertEquals(2, array.findLowIntervalIndex(40));
111 test('findIntersectingIntervals', function() {
112 var array = new ArrayOfIntervals([
117 assertArrayEquals([], array.findIntersectingIntervals(0, 0));
118 assertArrayEquals([], array.findIntersectingIntervals(100, 0));
119 assertArrayEquals([], array.findIntersectingIntervals(0, 10));
121 assertArrayEquals([0], array.findIntersectingIntervals(0, 10.1));
122 assertArrayEquals([0], array.findIntersectingIntervals(5, 15));
123 assertArrayEquals([0], array.findIntersectingIntervals(15, 20));
125 assertArrayEquals([], array.findIntersectingIntervals(15.1, 20));
127 assertArrayEquals([1], array.findIntersectingIntervals(15.1, 20.1));
128 assertArrayEquals([1], array.findIntersectingIntervals(20, 30));
129 assertArrayEquals([1], array.findIntersectingIntervals(30, 100));
131 assertArrayEquals([0, 1], array.findIntersectingIntervals(0, 100));
132 assertArrayEquals([0, 1], array.findIntersectingIntervals(15, 20.1));
135 test('findClosestElement', function() {
136 var array = new ArrayOfIntervals([
141 // Test the helper method first.
142 assertEquals(array.get(-1), undefined);
143 assertEquals(array.get(0), array.array[0]);
144 assertEquals(array.get(1), array.array[1]);
145 assertEquals(array.get(2), undefined);
147 assertEquals(null, array.findClosestElement(0, 0));
148 assertEquals(null, array.findClosestElement(0, 9.9));
149 assertEquals(null, array.findClosestElement(10, -10));
151 assertEquals(array.get(0), array.findClosestElement(0, 10));
152 assertEquals(array.get(0), array.findClosestElement(8, 5));
153 assertEquals(array.get(0), array.findClosestElement(10, 0));
154 assertEquals(array.get(0), array.findClosestElement(12, 2));
156 assertEquals(null, array.findClosestElement(15, 3));
157 assertNotEquals(null, array.findClosestElement(15, 5));
159 assertEquals(array.get(1), array.findClosestElement(19, 1));
160 assertEquals(array.get(1), array.findClosestElement(20, 0));
161 assertEquals(array.get(1), array.findClosestElement(30, 15));
163 assertEquals(null, array.findClosestElement(30, 9.9));
164 assertEquals(null, array.findClosestElement(100, 50));
167 test('findClosestInterval', function() {
168 var array = new ArrayOfIntervals([
173 assertEquals(null, array.findClosestInterval(0, 0));
174 assertEquals(null, array.findClosestInterval(0, 9.9));
175 assertEquals(null, array.findClosestInterval(0, -100));
177 assertEquals(array.get(0), array.findClosestInterval(0, 10));
178 assertEquals(array.get(0), array.findClosestInterval(10, 0));
179 assertEquals(array.get(0), array.findClosestInterval(12, 3));
180 assertEquals(array.get(0), array.findClosestInterval(12, 100));
182 assertEquals(array.get(0), array.findClosestInterval(13, 3));
183 assertEquals(array.get(0), array.findClosestInterval(13, 20));
184 assertEquals(array.get(0), array.findClosestInterval(15, 0));
186 assertEquals(null, array.findClosestInterval(17.5, 0));
187 assertEquals(null, array.findClosestInterval(17.5, 2.4));
188 assertNotEquals(null, array.findClosestInterval(17.5, 2.5));
189 assertNotEquals(null, array.findClosestInterval(17.5, 10));
191 assertEquals(array.get(1), array.findClosestInterval(19, 2));
192 assertEquals(array.get(1), array.findClosestInterval(20, 0));
193 assertEquals(array.get(1), array.findClosestInterval(24, 100));
194 assertEquals(array.get(1), array.findClosestInterval(26, 100));
196 assertEquals(array.get(1), array.findClosestInterval(30, 0));
197 assertEquals(array.get(1), array.findClosestInterval(35, 10));
198 assertEquals(array.get(1), array.findClosestInterval(50, 100));
200 assertEquals(null, array.findClosestInterval(50, 19));
201 assertEquals(null, array.findClosestInterval(100, 50));
202 assertEquals(null, array.findClosestInterval(50, -100));