// ArrayBox実装テスト
print("=== ArrayBox実装テスト ===")

// 1. ArrayBoxの作成
print("\n1. ArrayBoxの作成:")
local arr
arr = new ArrayBox()
print("ArrayBox created: " + arr.toString())
// print("Type: " + arr.type_name())  // type_nameはArrayBoxのメソッドではない
print("Initial length: " + arr.length())

// 2. 要素の追加（push）
print("\n2. 要素の追加:")
arr.push("Apple")
arr.push("Banana")
arr.push("Cherry")
arr.push(42)
arr.push(true)
print("After push: " + arr.toString())
print("Length: " + arr.length())

// 3. 要素の取得（get）
print("\n3. 要素の取得:")
print("arr.get(0) = " + arr.get(0))
print("arr.get(1) = " + arr.get(1))
print("arr.get(3) = " + arr.get(3))
print("arr.get(10) = " + arr.get(10))  // 範囲外

// 4. 要素の削除（pop）
print("\n4. 要素の削除:")
local popped
popped = arr.pop()
print("Popped: " + popped)
print("After pop: " + arr.toString())
print("Length: " + arr.length())

// 5. インデックス検索（indexOf）
print("\n5. インデックス検索:")
print("indexOf('Apple') = " + arr.indexOf("Apple"))
print("indexOf('Banana') = " + arr.indexOf("Banana"))
print("indexOf('NotExist') = " + arr.indexOf("NotExist"))

// 6. 要素の確認（contains）
print("\n6. 要素の確認:")
print("contains('Apple') = " + arr.contains("Apple"))
print("contains(42) = " + arr.contains(42))
print("contains('NotExist') = " + arr.contains("NotExist"))

// 7. 文字列結合（join）
print("\n7. 文字列結合:")
print("join(', ') = " + arr.join(", "))
print("join(' - ') = " + arr.join(" - "))

// 8. 要素の設定（set）
print("\n8. 要素の設定:")
arr.set(1, "Orange")
print("After set(1, 'Orange'): " + arr.toString())

// 9. 要素の削除（remove）
print("\n9. 要素の削除:")
local removed
removed = arr.remove(2)
print("Removed: " + removed)
print("After remove(2): " + arr.toString())
print("Length: " + arr.length())

// 10. 配列のクリア（clear）
print("\n10. 配列のクリア:")
arr.clear()
print("After clear: " + arr.toString())
print("Length: " + arr.length())
print("isEmpty: " + arr.isEmpty())

print("\n=== ArrayBoxテスト完了！ ===")