local vb = require("clientdata_prop_b")
local va = require("clientdata_prop_a")

local a = va.A()
va.test_A(a)
va.test_tA(a)
vb.test_t2A(a)
vb.test_t3A(a)
a:fA()

local b = vb.B()
va.test_A(b)
va.test_tA(b)
vb.test_t2A(b)
vb.test_t3A(b)
vb.test_B(b)
-- b:fA()  TODO class B inherite class A but miss its methods!
b:fB()

local c = vb.C()
va.test_A(c)
va.test_tA(c)
vb.test_t2A(c)
vb.test_t3A(c)
vb.test_C(c)
-- c:fA()  TODO class C inherite class A but miss its methods!
c:fC()

local d = vb.D()
va.test_A(d)
va.test_tA(d)
vb.test_t2A(d)
vb.test_t3A(d)
vb.test_D(d)
vb.test_tD(d)
vb.test_t2D(d)
-- d:fA()  TODO class D inherite class A but miss its methods!
d:fD()

local a2 = va.new_tA()
va.test_A(a2)
va.test_tA(a2)
vb.test_t2A(a2)
vb.test_t3A(a2)
a2:fA()

local a3 = vb.new_t2A()
va.test_A(a3)
va.test_tA(a3)
vb.test_t2A(a3)
vb.test_t3A(a3)
a3:fA()

local a4 = vb.new_t3A()
va.test_A(a4)
va.test_tA(a4)
vb.test_t2A(a4)
vb.test_t3A(a4)
a4:fA()

local d2 = vb.new_tD()
va.test_A(d2)
va.test_tA(d2)
vb.test_t2A(d2)
vb.test_t3A(d2)
vb.test_D(d2)
vb.test_tD(d2)
vb.test_t2D(d2)
-- d2:fA() TODO class D inherite class A but miss its methods!
d2:fD()

local d3 = vb.new_t2D()
va.test_A(d3)
va.test_tA(d3)
vb.test_t2A(d3)
vb.test_t3A(d3)
vb.test_D(d3)
vb.test_tD(d3)
vb.test_t2D(d3)
-- d3:fA() TODO class D inherite class A but miss its methods!
d3:fD()
