- add third_party src.
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / base / sorted_array_utils_test.js
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.
4
5 'use strict';
6
7 base.require('base.sorted_array_utils');
8
9 base.unittest.testSuite('base.sorted_array_utils', function() {
10   var ArrayOfIntervals = function(array) {
11     this.array = array;
12   }
13
14   ArrayOfIntervals.prototype = {
15
16     get: function(index) {
17       return this.array[index];
18     },
19
20     findLowElementIndex: function(ts) {
21       return base.findLowIndexInSortedArray(
22           this.array,
23           function(x) { return x.lo; },
24           ts);
25     },
26
27     findLowIntervalIndex: function(ts) {
28       return base.findLowIndexInSortedIntervals(
29           this.array,
30           function(x) { return x.lo; },
31           function(x) { return x.hi - x.lo; },
32           ts);
33     },
34
35     findIntersectingIntervals: function(tsA, tsB) {
36       var array = this.array;
37       var result = [];
38       base.iterateOverIntersectingIntervals(
39           this.array,
40           function(x) { return x.lo; },
41           function(x) { return x.hi - x.lo; },
42           tsA,
43           tsB,
44           function(x) { result.push(array.indexOf(x)); });
45       return result;
46     },
47
48     findClosestElement: function(ts, tsDiff) {
49       return base.findClosestElementInSortedArray(
50           this.array,
51           function(x) { return x.lo; },
52           ts,
53           tsDiff);
54     },
55
56     findClosestInterval: function(ts, tsDiff) {
57       return base.findClosestIntervalInSortedIntervals(
58           this.array,
59           function(x) { return x.lo; },
60           function(x) { return x.hi; },
61           ts,
62           tsDiff);
63     }
64   };
65
66   test('findLowElementIndex', function() {
67     var array = new ArrayOfIntervals([
68       {lo: 10, hi: 15},
69       {lo: 20, hi: 30}
70     ]);
71
72     assertEquals(0, array.findLowElementIndex(-100));
73     assertEquals(0, array.findLowElementIndex(0));
74     assertEquals(0, array.findLowElementIndex(10));
75
76     assertEquals(1, array.findLowElementIndex(10.1));
77     assertEquals(1, array.findLowElementIndex(15));
78     assertEquals(1, array.findLowElementIndex(20));
79
80     assertEquals(2, array.findLowElementIndex(20.1));
81     assertEquals(2, array.findLowElementIndex(21));
82     assertEquals(2, array.findLowElementIndex(100));
83   });
84
85   test('findLowIntervalIndex', function() {
86     var array = new ArrayOfIntervals([
87       {lo: 10, hi: 15},
88       {lo: 20, hi: 30}
89     ]);
90
91     assertEquals(-1, array.findLowIntervalIndex(0));
92     assertEquals(-1, array.findLowIntervalIndex(9.9));
93
94     assertEquals(0, array.findLowIntervalIndex(10));
95     assertEquals(0, array.findLowIntervalIndex(12));
96     assertEquals(0, array.findLowIntervalIndex(14.9));
97
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));
102
103     assertEquals(1, array.findLowIntervalIndex(20));
104     assertEquals(1, array.findLowIntervalIndex(21));
105     assertEquals(1, array.findLowIntervalIndex(29.99));
106
107     assertEquals(2, array.findLowIntervalIndex(30));
108     assertEquals(2, array.findLowIntervalIndex(40));
109   });
110
111   test('findIntersectingIntervals', function() {
112     var array = new ArrayOfIntervals([
113       {lo: 10, hi: 15},
114       {lo: 20, hi: 30}
115     ]);
116
117     assertArrayEquals([], array.findIntersectingIntervals(0, 0));
118     assertArrayEquals([], array.findIntersectingIntervals(100, 0));
119     assertArrayEquals([], array.findIntersectingIntervals(0, 10));
120
121     assertArrayEquals([0], array.findIntersectingIntervals(0, 10.1));
122     assertArrayEquals([0], array.findIntersectingIntervals(5, 15));
123     assertArrayEquals([0], array.findIntersectingIntervals(15, 20));
124
125     assertArrayEquals([], array.findIntersectingIntervals(15.1, 20));
126
127     assertArrayEquals([1], array.findIntersectingIntervals(15.1, 20.1));
128     assertArrayEquals([1], array.findIntersectingIntervals(20, 30));
129     assertArrayEquals([1], array.findIntersectingIntervals(30, 100));
130
131     assertArrayEquals([0, 1], array.findIntersectingIntervals(0, 100));
132     assertArrayEquals([0, 1], array.findIntersectingIntervals(15, 20.1));
133   });
134
135   test('findClosestElement', function() {
136     var array = new ArrayOfIntervals([
137       {lo: 10, hi: 15},
138       {lo: 20, hi: 30}
139     ]);
140
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);
146
147     assertEquals(null, array.findClosestElement(0, 0));
148     assertEquals(null, array.findClosestElement(0, 9.9));
149     assertEquals(null, array.findClosestElement(10, -10));
150
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));
155
156     assertEquals(null, array.findClosestElement(15, 3));
157     assertNotEquals(null, array.findClosestElement(15, 5));
158
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));
162
163     assertEquals(null, array.findClosestElement(30, 9.9));
164     assertEquals(null, array.findClosestElement(100, 50));
165   });
166
167   test('findClosestInterval', function() {
168     var array = new ArrayOfIntervals([
169       {lo: 10, hi: 15},
170       {lo: 20, hi: 30}
171     ]);
172
173     assertEquals(null, array.findClosestInterval(0, 0));
174     assertEquals(null, array.findClosestInterval(0, 9.9));
175     assertEquals(null, array.findClosestInterval(0, -100));
176
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));
181
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));
185
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));
190
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));
195
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));
199
200     assertEquals(null, array.findClosestInterval(50, 19));
201     assertEquals(null, array.findClosestInterval(100, 50));
202     assertEquals(null, array.findClosestInterval(50, -100));
203   });
204 });