uint256_test.gno

2.89 Kb ยท 127 lines
  1package uint256
  2
  3import (
  4	"testing"
  5)
  6
  7func TestSetAllOne(t *testing.T) {
  8	z := Zero()
  9	z.SetAllOne()
 10	if z.String() != twoPow256Sub1 {
 11		t.Errorf("Expected all ones, got %s", z.String())
 12	}
 13}
 14
 15func TestByte(t *testing.T) {
 16	tests := []struct {
 17		input    string
 18		position uint64
 19		expected byte
 20	}{
 21		{"0x1000000000000000000000000000000000000000000000000000000000000000", 0, 16},
 22		{"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 0, 255},
 23		{"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 31, 255},
 24	}
 25
 26	for i, tt := range tests {
 27		z, _ := FromHex(tt.input)
 28		n := NewUint(tt.position)
 29		result := z.Byte(n)
 30
 31		if result.arr[0] != uint64(tt.expected) {
 32			t.Errorf("Test case %d failed. Input: %s, Position: %d, Expected: %d, Got: %d",
 33				i, tt.input, tt.position, tt.expected, result.arr[0])
 34		}
 35
 36		// check other array elements are 0
 37		if result.arr[1] != 0 || result.arr[2] != 0 || result.arr[3] != 0 {
 38			t.Errorf("Test case %d failed. Non-zero values in upper bytes", i)
 39		}
 40	}
 41
 42	// overflow
 43	z, _ := FromHex("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
 44	n := NewUint(32)
 45	result := z.Byte(n)
 46
 47	if !result.IsZero() {
 48		t.Errorf("Expected zero for position >= 32, got %v", result)
 49	}
 50}
 51
 52func TestBitLen(t *testing.T) {
 53	tests := []struct {
 54		input    string
 55		expected int
 56	}{
 57		{"0x0", 0},
 58		{"0x1", 1},
 59		{"0xff", 8},
 60		{"0x100", 9},
 61		{"0xffff", 16},
 62		{"0x10000", 17},
 63		{"0xffffffffffffffff", 64},
 64		{"0x10000000000000000", 65},
 65		{"0xffffffffffffffffffffffffffffffff", 128},
 66		{"0x100000000000000000000000000000000", 129},
 67		{"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 256},
 68	}
 69
 70	for i, tt := range tests {
 71		z, _ := FromHex(tt.input)
 72		result := z.BitLen()
 73
 74		if result != tt.expected {
 75			t.Errorf("Test case %d failed. Input: %s, Expected: %d, Got: %d",
 76				i, tt.input, tt.expected, result)
 77		}
 78	}
 79}
 80
 81func TestByteLen(t *testing.T) {
 82	tests := []struct {
 83		input    string
 84		expected int
 85	}{
 86		{"0x0", 0},
 87		{"0x1", 1},
 88		{"0xff", 1},
 89		{"0x100", 2},
 90		{"0xffff", 2},
 91		{"0x10000", 3},
 92		{"0xffffffffffffffff", 8},
 93		{"0x10000000000000000", 9},
 94		{"0xffffffffffffffffffffffffffffffff", 16},
 95		{"0x100000000000000000000000000000000", 17},
 96		{"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32},
 97	}
 98
 99	for i, tt := range tests {
100		z, _ := FromHex(tt.input)
101		result := z.ByteLen()
102
103		if result != tt.expected {
104			t.Errorf("Test case %d failed. Input: %s, Expected: %d, Got: %d",
105				i, tt.input, tt.expected, result)
106		}
107	}
108}
109
110func TestClone(t *testing.T) {
111	tests := []struct {
112		input    string
113		expected string
114	}{
115		{"0x1", "1"},
116		{"0x100", "256"},
117		{"0x10000000000000000", "18446744073709551616"},
118	}
119
120	for _, tt := range tests {
121		z, _ := FromHex(tt.input)
122		result := z.Clone()
123		if result.String() != tt.expected {
124			t.Errorf("Test %s failed. Expected %s, got %s", tt.input, tt.expected, result.String())
125		}
126	}
127}