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