67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package auratests.format; | ||
|  | 
 | ||
|  | import haxe.Int64; | ||
|  | import haxe.io.Bytes; | ||
|  | import haxe.io.BytesInput; | ||
|  | 
 | ||
|  | import utest.Assert; | ||
|  | 
 | ||
|  | using aura.format.InputExtension; | ||
|  | 
 | ||
|  | class TestInputExtension extends utest.Test { | ||
|  | 	var bytes: Bytes; | ||
|  | 	var inp: BytesInput; | ||
|  | 
 | ||
|  | 	// 10000000 01000000 00100000 00010000 - 00001000 00000100 00000010 00000001 | ||
|  | 	var inputValue = Int64.make( | ||
|  | 		1 << 31 | 1 << 22 | 1 << 13 | 1 << 4, | ||
|  | 		1 << 27 | 1 << 18 | 1 << 9 | 1 | ||
|  | 	); | ||
|  | 
 | ||
|  | 	// 00000001 00000010 00000100 00001000 - 00010000 00100000 01000000 10000000 | ||
|  | 	var inputValueInverted = Int64.make( | ||
|  | 		1 << 24 | 1 << 17 | 1 << 10 | 1 << 3, | ||
|  | 		1 << 28 | 1 << 21 | 1 << 14 | 1 << 7 | ||
|  | 	); | ||
|  | 
 | ||
|  | 	function setup() { | ||
|  | 		bytes = Bytes.alloc(8); | ||
|  | 		inp = new BytesInput(bytes); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_readInt64_littleEndian_correctRead() { | ||
|  | 		bytes.setInt64(0, inputValue); // setInt64 is little-endian | ||
|  | 		inp.bigEndian = false; | ||
|  | 		assertI64Equals(inputValue, inp.readInt64()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_readInt64_bigEndian_correctRead() { | ||
|  | 		bytes.setInt64(0, inputValue); | ||
|  | 		inp.bigEndian = true; | ||
|  | 		assertI64Equals(inputValueInverted, inp.readInt64()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_readUint32_isUnsigned() { | ||
|  | 		bytes.setInt32(0, 1 << 31); | ||
|  | 		inp.bigEndian = false; | ||
|  | 		assertI64Equals(Int64.make(0, -2147483648/* -2^31, sign bit doesn't mean anything in low part */) , inp.readUInt32()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_readUint32_littleEndian_correctRead() { | ||
|  | 		bytes.setInt32(0, inputValue.high); | ||
|  | 		inp.bigEndian = false; | ||
|  | 		assertI64Equals(Int64.make(0, inputValue.high), inp.readUInt32()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_readUint32_bigEndian_correctRead() { | ||
|  | 		bytes.setInt32(0, inputValue.high); | ||
|  | 		inp.bigEndian = true; | ||
|  | 		assertI64Equals(Int64.make(0, inputValueInverted.low), inp.readUInt32()); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function assertI64Equals(want: Int64, have: Int64, ?pos: haxe.PosInfos) { | ||
|  | 		final errorMessage = 'Expected (high: ${want.high}, low: ${want.low}), have (high: ${have.high}, low: ${have.low}).'; | ||
|  | 		Assert.isTrue(want.low == have.low && want.high == have.high, errorMessage, pos); | ||
|  | 	} | ||
|  | } |