72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | // @flow
 | ||
|  | 
 | ||
|  | import {decodeLength, encodeLength} from '../src/util/shortvec-encoding'; | ||
|  | 
 | ||
|  | function checkDecodedArray(array: Array<number>, expectedValue: number) { | ||
|  |   expect(decodeLength(array)).toEqual(expectedValue); | ||
|  |   expect(array.length).toEqual(0); | ||
|  | } | ||
|  | 
 | ||
|  | test('shortvec decodeLength', () => { | ||
|  |   let array = []; | ||
|  |   checkDecodedArray(array, 0); | ||
|  | 
 | ||
|  |   array = [5]; | ||
|  |   checkDecodedArray(array, 5); | ||
|  | 
 | ||
|  |   array = [0x7f]; | ||
|  |   checkDecodedArray(array, 0x7f); | ||
|  | 
 | ||
|  |   array = [0x80, 0x01]; | ||
|  |   checkDecodedArray(array, 0x80); | ||
|  | 
 | ||
|  |   array = [0xff, 0x01]; | ||
|  |   checkDecodedArray(array, 0xff); | ||
|  | 
 | ||
|  |   array = [0x80, 0x02]; | ||
|  |   checkDecodedArray(array, 0x100); | ||
|  | 
 | ||
|  |   array = [0xff, 0xff, 0x01]; | ||
|  |   checkDecodedArray(array, 0x7fff); | ||
|  | 
 | ||
|  |   array = [0x80, 0x80, 0x80, 0x01]; | ||
|  |   checkDecodedArray(array, 0x200000); | ||
|  | }); | ||
|  | 
 | ||
|  | function checkEncodedArray( | ||
|  |   array: Array<number>, | ||
|  |   len: number, | ||
|  |   prevLength: number, | ||
|  |   addedLength: number, | ||
|  |   expectedArray: Array<number>, | ||
|  | ) { | ||
|  |   encodeLength(array, len); | ||
|  |   expect(array.length).toEqual(prevLength); | ||
|  |   expect(array.slice(-addedLength)).toEqual(expectedArray); | ||
|  | } | ||
|  | 
 | ||
|  | test('shortvec encodeLength', () => { | ||
|  |   let array = []; | ||
|  |   let prevLength = 1; | ||
|  |   checkEncodedArray(array, 0, prevLength, 1, [0]); | ||
|  | 
 | ||
|  |   checkEncodedArray(array, 5, (prevLength += 1), 1, [5]); | ||
|  | 
 | ||
|  |   checkEncodedArray(array, 0x7f, (prevLength += 1), 1, [0x7f]); | ||
|  | 
 | ||
|  |   checkEncodedArray(array, 0x80, (prevLength += 2), 2, [0x80, 0x01]); | ||
|  | 
 | ||
|  |   checkEncodedArray(array, 0xff, (prevLength += 2), 2, [0xff, 0x01]); | ||
|  | 
 | ||
|  |   checkEncodedArray(array, 0x100, (prevLength += 2), 2, [0x80, 0x02]); | ||
|  | 
 | ||
|  |   checkEncodedArray(array, 0x7fff, (prevLength += 3), 3, [0xff, 0xff, 0x01]); | ||
|  | 
 | ||
|  |   prevLength = checkEncodedArray(array, 0x200000, (prevLength += 4), 4, [ | ||
|  |     0x80, | ||
|  |     0x80, | ||
|  |     0x80, | ||
|  |     0x01, | ||
|  |   ]); | ||
|  | }); |