package ygo_test import ( "testing" "git.kilimanjaro.io/ygo" ) func TestArrayBasic(t *testing.T) { doc, err := ygo.NewDoc() if err != nil { t.Fatalf("failed to create doc: %v", err) } defer doc.Destroy() arr, err := doc.GetArray("test") if err != nil { t.Fatalf("failed to get array: %v", err) } defer arr.Destroy() var length uint32 err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { // Create nested array input nested := []ygo.Input{ygo.Float(0.5), ygo.Bool(true)} nestedArray := ygo.YArray(nested) // Insert items items := []ygo.Input{ nestedArray, ygo.String("hello"), ygo.Int(123), } arr.InsertRange(txn, 0, items) length = arr.Len() return nil }) if err != nil { t.Fatalf("transaction failed: %v", err) } if length != 3 { t.Errorf("expected length 3, got %d", length) } // Remove middle element in new transaction err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { arr.RemoveRange(txn, 1, 1) length = arr.Len() return nil }) if err != nil { t.Fatalf("transaction failed: %v", err) } if length != 2 { t.Errorf("expected length 2, got %d", length) } // Check first element is an array err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { out, err := arr.Get(txn, 0) if err != nil { return err } defer out.Destroy() // For now, just verify we can read something back // Full type checking would need more implementation if out.IsUndefined() { t.Error("expected non-undefined output") } return nil }) if err != nil { t.Fatalf("transaction failed: %v", err) } } func TestArrayPush(t *testing.T) { doc, err := ygo.NewDoc() if err != nil { t.Fatalf("failed to create doc: %v", err) } defer doc.Destroy() arr, err := doc.GetArray("test") if err != nil { t.Fatalf("failed to get array: %v", err) } defer arr.Destroy() var length uint32 err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { arr.Push(txn, ygo.Int(1)) arr.Push(txn, ygo.Int(2)) var err error length = arr.Len() return err }) if err != nil { t.Fatalf("transaction failed: %v", err) } if length != 2 { t.Errorf("expected length 2, got %d", length) } }