array_test.go

  1package ygo_test
  2
  3import (
  4	"testing"
  5
  6	"git.kilimanjaro.io/ygo"
  7)
  8
  9func TestArrayBasic(t *testing.T) {
 10	doc, err := ygo.NewDoc()
 11	if err != nil {
 12		t.Fatalf("failed to create doc: %v", err)
 13	}
 14	defer doc.Destroy()
 15
 16	arr, err := doc.GetArray("test")
 17	if err != nil {
 18		t.Fatalf("failed to get array: %v", err)
 19	}
 20	defer arr.Destroy()
 21
 22	var length uint32
 23
 24	err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error {
 25		// Create nested array input
 26		nested := []ygo.Input{ygo.Float(0.5), ygo.Bool(true)}
 27		nestedArray := ygo.YArray(nested)
 28
 29		// Insert items
 30		items := []ygo.Input{
 31			nestedArray,
 32			ygo.String("hello"),
 33			ygo.Int(123),
 34		}
 35		arr.InsertRange(txn, 0, items)
 36
 37		length = arr.Len()
 38		return nil
 39	})
 40	if err != nil {
 41		t.Fatalf("transaction failed: %v", err)
 42	}
 43
 44	if length != 3 {
 45		t.Errorf("expected length 3, got %d", length)
 46	}
 47
 48	// Remove middle element in new transaction
 49	err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error {
 50		arr.RemoveRange(txn, 1, 1)
 51
 52		length = arr.Len()
 53		return nil
 54	})
 55	if err != nil {
 56		t.Fatalf("transaction failed: %v", err)
 57	}
 58
 59	if length != 2 {
 60		t.Errorf("expected length 2, got %d", length)
 61	}
 62
 63	// Check first element is an array
 64	err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error {
 65		out, err := arr.Get(txn, 0)
 66		if err != nil {
 67			return err
 68		}
 69		defer out.Destroy()
 70
 71		// For now, just verify we can read something back
 72		// Full type checking would need more implementation
 73		if out.IsUndefined() {
 74			t.Error("expected non-undefined output")
 75		}
 76		return nil
 77	})
 78	if err != nil {
 79		t.Fatalf("transaction failed: %v", err)
 80	}
 81}
 82
 83func TestArrayPush(t *testing.T) {
 84	doc, err := ygo.NewDoc()
 85	if err != nil {
 86		t.Fatalf("failed to create doc: %v", err)
 87	}
 88	defer doc.Destroy()
 89
 90	arr, err := doc.GetArray("test")
 91	if err != nil {
 92		t.Fatalf("failed to get array: %v", err)
 93	}
 94	defer arr.Destroy()
 95
 96	var length uint32
 97
 98	err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error {
 99		arr.Push(txn, ygo.Int(1))
100		arr.Push(txn, ygo.Int(2))
101
102		var err error
103		length = arr.Len()
104		return err
105	})
106	if err != nil {
107		t.Fatalf("transaction failed: %v", err)
108	}
109
110	if length != 2 {
111		t.Errorf("expected length 2, got %d", length)
112	}
113}
114