# Diamond Problem - 状態変更の重複実行テスト

print("=== Diamond State Problem Test ===")

# カウンター付きStringBox拡張
box CounterString from StringBox {
    init { counter }
    
    birth(content) {
        from StringBox.birth(content)
        me.counter = 0
        print("CounterString.birth: counter = " + me.counter)
    }
    
    override toString() {
        me.counter = me.counter + 1  # ← 呼び出されるたびにカウントアップ
        print("CounterString.toString called: counter = " + me.counter)
        return "Counter[" + me.counter + "]: " + from StringBox.toString()
    }
}

# Diamond Problem - 状態変更が重複する
box DoubleProblem from CounterString, StringBox {
    init { prob_data }
    
    birth(content) {
        from CounterString.birth(content)
        me.prob_data = "problem"
        print("DoubleProblem.birth called")
    }
    
    override toString() {
        print("DoubleProblem.toString called")
        # 同じCounterStringのcounterが2回増える？
        local a = from CounterString.toString()  # counter++
        local b = from StringBox.toString()      # 別のStringBox？
        return "Double[" + a + " | " + b + "]"
    }
}

# テスト実行
print("\n--- Creating instance ---")
local prob = new DoubleProblem("test")

print("\n--- First toString call ---")
print(prob.toString())

print("\n--- Second toString call ---")
print(prob.toString())

print("\n=== Test completed ===")