73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package abi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"bytes"
							 | 
						||
| 
								 | 
							
									"math/big"
							 | 
						||
| 
								 | 
							
									"reflect"
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestNumberTypes(t *testing.T) {
							 | 
						||
| 
								 | 
							
									ubytes := make([]byte, 32)
							 | 
						||
| 
								 | 
							
									ubytes[31] = 1
							 | 
						||
| 
								 | 
							
									sbytesmin := []byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									unsigned := U256(big.NewInt(1))
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(unsigned, ubytes) {
							 | 
						||
| 
								 | 
							
										t.Error("expected %x got %x", ubytes, unsigned)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									signed := S256(big.NewInt(1))
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(signed, ubytes) {
							 | 
						||
| 
								 | 
							
										t.Error("expected %x got %x", ubytes, unsigned)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									signed = S256(big.NewInt(-1))
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(signed, sbytesmin) {
							 | 
						||
| 
								 | 
							
										t.Error("expected %x got %x", ubytes, unsigned)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestPackNumber(t *testing.T) {
							 | 
						||
| 
								 | 
							
									ubytes := make([]byte, 32)
							 | 
						||
| 
								 | 
							
									ubytes[31] = 1
							 | 
						||
| 
								 | 
							
									sbytesmin := []byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
							 | 
						||
| 
								 | 
							
									maxunsigned := []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									packed := packNum(reflect.ValueOf(1), IntTy)
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(packed, ubytes) {
							 | 
						||
| 
								 | 
							
										t.Errorf("expected %x got %x", ubytes, packed)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									packed = packNum(reflect.ValueOf(-1), IntTy)
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(packed, sbytesmin) {
							 | 
						||
| 
								 | 
							
										t.Errorf("expected %x got %x", ubytes, packed)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									packed = packNum(reflect.ValueOf(1), UintTy)
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(packed, ubytes) {
							 | 
						||
| 
								 | 
							
										t.Errorf("expected %x got %x", ubytes, packed)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									packed = packNum(reflect.ValueOf(-1), UintTy)
							 | 
						||
| 
								 | 
							
									if !bytes.Equal(packed, maxunsigned) {
							 | 
						||
| 
								 | 
							
										t.Errorf("expected %x got %x", maxunsigned, packed)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									packed = packNum(reflect.ValueOf("string"), UintTy)
							 | 
						||
| 
								 | 
							
									if packed != nil {
							 | 
						||
| 
								 | 
							
										t.Errorf("expected 'string' to pack to nil. got %x instead", packed)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestSigned(t *testing.T) {
							 | 
						||
| 
								 | 
							
									if isSigned(reflect.ValueOf(uint(10))) {
							 | 
						||
| 
								 | 
							
										t.Error()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if !isSigned(reflect.ValueOf(int(10))) {
							 | 
						||
| 
								 | 
							
										t.Error()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if !isSigned(reflect.ValueOf(big.NewInt(10))) {
							 | 
						||
| 
								 | 
							
										t.Error()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |