require 'minherit'

a = Minherit::Foo.new
b = Minherit::Bar.new
c = Minherit::FooBar.new
d = Minherit::Spam.new

if a.xget() != 1
  raise RuntimeError, "Bad attribute value"
end

if b.yget() != 2
  raise RuntimeError, "Bad attribute value"
end    

if c.xget() != 1 or c.yget() != 2 or c.zget() != 3
  raise RuntimeError, "Bad attribute value"
end

if d.xget() != 1 or d.yget() != 2 or d.zget() != 3 or d.wget() != 4
  raise RuntimeError, "Bad attribute value"
end

if Minherit.xget(a) != 1
  raise RuntimeError, "Bad attribute value #{Minherit.xget(a)}"
end     

if Minherit.yget(b) != 2
  raise RuntimeError, "Bad attribute value #{Minherit.yget(b)}"
end

if Minherit.xget(c) != 1 or Minherit.yget(c) != 2 or Minherit.zget(c) != 3
  raise RuntimeError, "Bad attribute value #{Minherit.xget(c)} #{Minherit.yget(c)} #{Minherit.zget(c)}"
end    

if Minherit.xget(d) != 1 or Minherit.yget(d) != 2 or Minherit.zget(d) != 3 or Minherit.wget(d) != 4
  raise RuntimeError, "Bad attribute value #{Minherit.xget(d)} #{Minherit.yget(d)} #{Minherit.zget(d)} #{Minherit.wget(d)}"
end

# Cleanse all of the pointers and see what happens

aa = Minherit.toFooPtr(a)
bb = Minherit.toBarPtr(b)
cc = Minherit.toFooBarPtr(c)
dd = Minherit.toSpamPtr(d)

if aa.xget() != 1
  raise RuntimeError, "Bad attribute value"
end

if bb.yget() != 2
  raise RuntimeError, "Bad attribute value"
end

if cc.xget() != 1 or cc.yget() != 2 or cc.zget() != 3
  raise RuntimeError, "Bad attribute value"
end

if dd.xget() != 1 or dd.yget() != 2 or dd.zget() != 3 or dd.wget() != 4
  raise RuntimeError, "Bad attribute value"
end

if Minherit.xget(aa) != 1
  raise RuntimeError, "Bad attribute value #{Minherit.xget(aa)}"
end

if Minherit.yget(bb) != 2
  raise RuntimeError, "Bad attribute value #{Minherit.yget(bb)}"
end

if Minherit.xget(cc) != 1 or Minherit.yget(cc) != 2 or Minherit.zget(cc) != 3
  raise RuntimeError, "Bad attribute value #{Minherit.xget(cc)} #{Minherit.yget(cc)} #{Minherit.zget(cc)}"
end

if Minherit.xget(dd) != 1 or Minherit.yget(dd) != 2 or Minherit.zget(dd) != 3 or Minherit.wget(dd) != 4
  raise RuntimeError, "Bad attribute value #{Minherit.xget(dd)} #{Minherit.yget(dd)} #{Minherit.zget(dd)} #{Minherit.wget(dd)}"
end

