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