forked from mirrors/gecko-dev
		
	 b503616295
			
		
	
	
		b503616295
		
	
	
	
	
		
			
			# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36056 --HG-- extra : source : 2616392f26053ee376b9126fbca696de5d4bb15b
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| const { BinarySearch } = ChromeUtils.import(
 | |
|   "resource://gre/modules/BinarySearch.jsm"
 | |
| );
 | |
| 
 | |
| function run_test() {
 | |
|   // empty array
 | |
|   check([], 1, false, 0);
 | |
| 
 | |
|   // one-element array
 | |
|   check([2], 2, true, 0);
 | |
|   check([2], 1, false, 0);
 | |
|   check([2], 3, false, 1);
 | |
| 
 | |
|   // two-element array
 | |
|   check([2, 4], 2, true, 0);
 | |
|   check([2, 4], 4, true, 1);
 | |
|   check([2, 4], 1, false, 0);
 | |
|   check([2, 4], 3, false, 1);
 | |
|   check([2, 4], 5, false, 2);
 | |
| 
 | |
|   // three-element array
 | |
|   check([2, 4, 6], 2, true, 0);
 | |
|   check([2, 4, 6], 4, true, 1);
 | |
|   check([2, 4, 6], 6, true, 2);
 | |
|   check([2, 4, 6], 1, false, 0);
 | |
|   check([2, 4, 6], 3, false, 1);
 | |
|   check([2, 4, 6], 5, false, 2);
 | |
|   check([2, 4, 6], 7, false, 3);
 | |
| 
 | |
|   // duplicates
 | |
|   check([2, 2], 2, true, 0);
 | |
|   check([2, 2], 1, false, 0);
 | |
|   check([2, 2], 3, false, 2);
 | |
| 
 | |
|   // duplicates on the left
 | |
|   check([2, 2, 4], 2, true, 1);
 | |
|   check([2, 2, 4], 4, true, 2);
 | |
|   check([2, 2, 4], 1, false, 0);
 | |
|   check([2, 2, 4], 3, false, 2);
 | |
|   check([2, 2, 4], 5, false, 3);
 | |
| 
 | |
|   // duplicates on the right
 | |
|   check([2, 4, 4], 2, true, 0);
 | |
|   check([2, 4, 4], 4, true, 1);
 | |
|   check([2, 4, 4], 1, false, 0);
 | |
|   check([2, 4, 4], 3, false, 1);
 | |
|   check([2, 4, 4], 5, false, 3);
 | |
| 
 | |
|   // duplicates in the middle
 | |
|   check([2, 4, 4, 6], 2, true, 0);
 | |
|   check([2, 4, 4, 6], 4, true, 1);
 | |
|   check([2, 4, 4, 6], 6, true, 3);
 | |
|   check([2, 4, 4, 6], 1, false, 0);
 | |
|   check([2, 4, 4, 6], 3, false, 1);
 | |
|   check([2, 4, 4, 6], 5, false, 3);
 | |
|   check([2, 4, 4, 6], 7, false, 4);
 | |
| 
 | |
|   // duplicates all around
 | |
|   check([2, 2, 4, 4, 6, 6], 2, true, 0);
 | |
|   check([2, 2, 4, 4, 6, 6], 4, true, 2);
 | |
|   check([2, 2, 4, 4, 6, 6], 6, true, 4);
 | |
|   check([2, 2, 4, 4, 6, 6], 1, false, 0);
 | |
|   check([2, 2, 4, 4, 6, 6], 3, false, 2);
 | |
|   check([2, 2, 4, 4, 6, 6], 5, false, 4);
 | |
|   check([2, 2, 4, 4, 6, 6], 7, false, 6);
 | |
| }
 | |
| 
 | |
| function check(array, target, expectedFound, expectedIdx) {
 | |
|   let [found, idx] = BinarySearch.search(cmp, array, target);
 | |
|   Assert.equal(found, expectedFound);
 | |
|   Assert.equal(idx, expectedIdx);
 | |
| 
 | |
|   idx = expectedFound ? expectedIdx : -1;
 | |
|   Assert.equal(BinarySearch.indexOf(cmp, array, target), idx);
 | |
|   Assert.equal(BinarySearch.insertionIndexOf(cmp, array, target), expectedIdx);
 | |
| }
 | |
| 
 | |
| function cmp(num1, num2) {
 | |
|   return num1 - num2;
 | |
| }
 |