fixed_test.go raw
1 package event
2
3 import (
4 "bytes"
5 "testing"
6
7 "next.orly.dev/pkg/nostr/types"
8 )
9
10 func TestIDFixed(t *testing.T) {
11 ev := New()
12 ev.ID = make([]byte, 32)
13 for i := range ev.ID {
14 ev.ID[i] = byte(i)
15 }
16
17 // Get fixed ID
18 id := ev.IDFixed()
19
20 // Verify contents match
21 if !bytes.Equal(id[:], ev.ID) {
22 t.Errorf("IDFixed: contents don't match")
23 }
24
25 // Verify it's a copy (modification doesn't affect original)
26 id[0] = 0xFF
27 if ev.ID[0] == 0xFF {
28 t.Error("IDFixed: should return a copy, not a reference")
29 }
30 }
31
32 func TestSetIDFixed(t *testing.T) {
33 ev := New()
34
35 // Create fixed ID
36 var id types.EventID
37 for i := range id {
38 id[i] = byte(i + 100)
39 }
40
41 // Set it
42 ev.SetIDFixed(id)
43
44 // Verify slice was updated
45 if !bytes.Equal(ev.ID, id[:]) {
46 t.Errorf("SetIDFixed: slice not updated correctly")
47 }
48
49 // Verify the slice is independent
50 id[0] = 0xFF
51 if ev.ID[0] == 0xFF {
52 t.Error("SetIDFixed: slice should be independent of input")
53 }
54 }
55
56 func TestPubkeyFixed(t *testing.T) {
57 ev := New()
58 ev.Pubkey = make([]byte, 32)
59 for i := range ev.Pubkey {
60 ev.Pubkey[i] = byte(i + 32)
61 }
62
63 pk := ev.PubkeyFixed()
64
65 if !bytes.Equal(pk[:], ev.Pubkey) {
66 t.Errorf("PubkeyFixed: contents don't match")
67 }
68
69 // Verify it's a copy
70 pk[0] = 0xFF
71 if ev.Pubkey[0] == 0xFF {
72 t.Error("PubkeyFixed: should return a copy")
73 }
74 }
75
76 func TestSetPubkeyFixed(t *testing.T) {
77 ev := New()
78
79 var pk types.Pubkey
80 for i := range pk {
81 pk[i] = byte(i + 50)
82 }
83
84 ev.SetPubkeyFixed(pk)
85
86 if !bytes.Equal(ev.Pubkey, pk[:]) {
87 t.Errorf("SetPubkeyFixed: slice not updated correctly")
88 }
89 }
90
91 func TestSigFixed(t *testing.T) {
92 ev := New()
93 ev.Sig = make([]byte, 64)
94 for i := range ev.Sig {
95 ev.Sig[i] = byte(i)
96 }
97
98 sig := ev.SigFixed()
99
100 if !bytes.Equal(sig[:], ev.Sig) {
101 t.Errorf("SigFixed: contents don't match")
102 }
103
104 // Verify it's a copy
105 sig[0] = 0xFF
106 if ev.Sig[0] == 0xFF {
107 t.Error("SigFixed: should return a copy")
108 }
109 }
110
111 func TestHexMethods(t *testing.T) {
112 ev := New()
113 ev.ID = make([]byte, 32)
114 ev.Pubkey = make([]byte, 32)
115 ev.Sig = make([]byte, 64)
116
117 for i := 0; i < 32; i++ {
118 ev.ID[i] = byte(i)
119 ev.Pubkey[i] = byte(i + 32)
120 }
121 for i := 0; i < 64; i++ {
122 ev.Sig[i] = byte(i)
123 }
124
125 // Test hex output
126 idHex := ev.IDHex()
127 if len(idHex) != 64 {
128 t.Errorf("IDHex: expected 64 chars, got %d", len(idHex))
129 }
130
131 pkHex := ev.PubkeyHex()
132 if len(pkHex) != 64 {
133 t.Errorf("PubkeyHex: expected 64 chars, got %d", len(pkHex))
134 }
135
136 sigHex := ev.SigHex()
137 if len(sigHex) != 128 {
138 t.Errorf("SigHex: expected 128 chars, got %d", len(sigHex))
139 }
140
141 // Verify lowercase
142 expectedIDHex := "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
143 if idHex != expectedIDHex {
144 t.Errorf("IDHex: got %s, want %s", idHex, expectedIDHex)
145 }
146 }
147
148 func TestCopyOnAssignment(t *testing.T) {
149 ev := New()
150 ev.ID = make([]byte, 32)
151 for i := range ev.ID {
152 ev.ID[i] = byte(i)
153 }
154
155 // Get fixed ID
156 id1 := ev.IDFixed()
157 id2 := id1 // This should copy the array
158
159 // Modify id2
160 id2[0] = 0xFF
161
162 // id1 should be unchanged (arrays copy on assignment)
163 if id1[0] == 0xFF {
164 t.Error("Array assignment should create a copy")
165 }
166
167 // Original event should be unchanged
168 if ev.ID[0] == 0xFF {
169 t.Error("Original event should be unchanged")
170 }
171 }
172
173 func BenchmarkIDFixed(b *testing.B) {
174 ev := New()
175 ev.ID = make([]byte, 32)
176 for i := range ev.ID {
177 ev.ID[i] = byte(i)
178 }
179
180 b.ResetTimer()
181 for i := 0; i < b.N; i++ {
182 id := ev.IDFixed()
183 _ = id
184 }
185 }
186
187 func BenchmarkIDSliceCopy(b *testing.B) {
188 ev := New()
189 ev.ID = make([]byte, 32)
190 for i := range ev.ID {
191 ev.ID[i] = byte(i)
192 }
193
194 b.ResetTimer()
195 for i := 0; i < b.N; i++ {
196 id := make([]byte, 32)
197 copy(id, ev.ID)
198 _ = id
199 }
200 }
201