| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2014 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // This file is part of the go-ethereum library. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-23 18:35:11 +02:00
										 |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | package common | 
					
						
							| 
									
										
										
										
											2014-07-30 13:06:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-03-22 13:32:52 +01:00
										 |  |  | 	"bytes" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2014-07-30 13:06:59 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | func TestCopyBytes(t *testing.T) { | 
					
						
							|  |  |  | 	input := []byte{1, 2, 3, 4} | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | 	v := CopyBytes(input) | 
					
						
							|  |  |  | 	if !bytes.Equal(v, []byte{1, 2, 3, 4}) { | 
					
						
							|  |  |  | 		t.Fatal("not equal after copy") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	v[0] = 99 | 
					
						
							|  |  |  | 	if bytes.Equal(v, input) { | 
					
						
							|  |  |  | 		t.Fatal("result is not a copy") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | func TestLeftPadBytes(t *testing.T) { | 
					
						
							|  |  |  | 	val := []byte{1, 2, 3, 4} | 
					
						
							|  |  |  | 	padded := []byte{0, 0, 0, 0, 1, 2, 3, 4} | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | 	if r := LeftPadBytes(val, 8); !bytes.Equal(r, padded) { | 
					
						
							|  |  |  | 		t.Fatalf("LeftPadBytes(%v, 8) == %v", val, r) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if r := LeftPadBytes(val, 2); !bytes.Equal(r, val) { | 
					
						
							|  |  |  | 		t.Fatalf("LeftPadBytes(%v, 2) == %v", val, r) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | func TestRightPadBytes(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | 	val := []byte{1, 2, 3, 4} | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | 	padded := []byte{1, 2, 3, 4, 0, 0, 0, 0} | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-21 15:34:28 +01:00
										 |  |  | 	if r := RightPadBytes(val, 8); !bytes.Equal(r, padded) { | 
					
						
							|  |  |  | 		t.Fatalf("RightPadBytes(%v, 8) == %v", val, r) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if r := RightPadBytes(val, 2); !bytes.Equal(r, val) { | 
					
						
							|  |  |  | 		t.Fatalf("RightPadBytes(%v, 2) == %v", val, r) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-11-14 15:01:52 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-22 13:32:52 +01:00
										 |  |  | func TestFromHex(t *testing.T) { | 
					
						
							|  |  |  | 	input := "0x01" | 
					
						
							|  |  |  | 	expected := []byte{1} | 
					
						
							|  |  |  | 	result := FromHex(input) | 
					
						
							| 
									
										
										
										
											2017-01-06 16:44:20 +01:00
										 |  |  | 	if !bytes.Equal(expected, result) { | 
					
						
							| 
									
										
										
										
											2017-11-29 02:21:41 +02:00
										 |  |  | 		t.Errorf("Expected %x got %x", expected, result) | 
					
						
							| 
									
										
										
										
											2015-03-22 13:32:52 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-04 19:34:15 +01:00
										 |  |  | func TestIsHex(t *testing.T) { | 
					
						
							|  |  |  | 	tests := []struct { | 
					
						
							|  |  |  | 		input string | 
					
						
							|  |  |  | 		ok    bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{"", true}, | 
					
						
							|  |  |  | 		{"0", false}, | 
					
						
							|  |  |  | 		{"00", true}, | 
					
						
							|  |  |  | 		{"a9e67e", true}, | 
					
						
							|  |  |  | 		{"A9E67E", true}, | 
					
						
							|  |  |  | 		{"0xa9e67e", false}, | 
					
						
							|  |  |  | 		{"a9e67e001", false}, | 
					
						
							|  |  |  | 		{"0xHELLO_MY_NAME_IS_STEVEN_@#$^&*", false}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	for _, test := range tests { | 
					
						
							|  |  |  | 		if ok := isHex(test.input); ok != test.ok { | 
					
						
							|  |  |  | 			t.Errorf("isHex(%q) = %v, want %v", test.input, ok, test.ok) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-22 13:32:52 +01:00
										 |  |  | func TestFromHexOddLength(t *testing.T) { | 
					
						
							|  |  |  | 	input := "0x1" | 
					
						
							|  |  |  | 	expected := []byte{1} | 
					
						
							|  |  |  | 	result := FromHex(input) | 
					
						
							| 
									
										
										
										
											2017-01-06 16:44:20 +01:00
										 |  |  | 	if !bytes.Equal(expected, result) { | 
					
						
							| 
									
										
										
										
											2017-11-29 02:21:41 +02:00
										 |  |  | 		t.Errorf("Expected %x got %x", expected, result) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestNoPrefixShortHexOddLength(t *testing.T) { | 
					
						
							|  |  |  | 	input := "1" | 
					
						
							|  |  |  | 	expected := []byte{1} | 
					
						
							|  |  |  | 	result := FromHex(input) | 
					
						
							|  |  |  | 	if !bytes.Equal(expected, result) { | 
					
						
							|  |  |  | 		t.Errorf("Expected %x got %x", expected, result) | 
					
						
							| 
									
										
										
										
											2015-03-22 13:32:52 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-04-15 13:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestTrimRightZeroes(t *testing.T) { | 
					
						
							|  |  |  | 	tests := []struct { | 
					
						
							|  |  |  | 		arr []byte | 
					
						
							|  |  |  | 		exp []byte | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{FromHex("0x00ffff00ff0000"), FromHex("0x00ffff00ff")}, | 
					
						
							|  |  |  | 		{FromHex("0x00000000000000"), []byte{}}, | 
					
						
							|  |  |  | 		{FromHex("0xff"), FromHex("0xff")}, | 
					
						
							|  |  |  | 		{[]byte{}, []byte{}}, | 
					
						
							|  |  |  | 		{FromHex("0x00ffffffffffff"), FromHex("0x00ffffffffffff")}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	for i, test := range tests { | 
					
						
							|  |  |  | 		got := TrimRightZeroes(test.arr) | 
					
						
							|  |  |  | 		if !bytes.Equal(got, test.exp) { | 
					
						
							|  |  |  | 			t.Errorf("test %d, got %x exp %x", i, got, test.exp) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |