# Ported to C# li_attribute_runme.cs

import li_attribute

aa = li_attribute.A(1,2,3)

if aa.a != 1:
  raise RuntimeError
aa.a = 3
if aa.a != 3:
  print aa.a
  raise RuntimeError

if aa.b != 2:
  print aa.b
  raise RuntimeError
aa.b = 5
if aa.b != 5:
  raise RuntimeError

if aa.d != aa.b:
  raise RuntimeError

if aa.c != 3:
  raise RuntimeError
#aa.c = 5
#if aa.c != 3:
#  raise RuntimeError

pi = li_attribute.Param_i(7)
if pi.value != 7:
 raise RuntimeError

pi.value=3
if pi.value != 3:
 raise RuntimeError

b = li_attribute.B(aa)

if b.a.c != 3:
 raise RuntimeError
  
# class/struct attribute with get/set methods using return/pass by reference
myFoo = li_attribute.MyFoo()
myFoo.x = 8
myClass = li_attribute.MyClass()
myClass.Foo = myFoo
if myClass.Foo.x != 8:
  raise RuntimeError

# class/struct attribute with get/set methods using return/pass by value
myClassVal = li_attribute.MyClassVal()
if myClassVal.ReadWriteFoo.x != -1:
  raise RuntimeError
if myClassVal.ReadOnlyFoo.x != -1:
  raise RuntimeError
myClassVal.ReadWriteFoo = myFoo
if myClassVal.ReadWriteFoo.x != 8:
  raise RuntimeError
if myClassVal.ReadOnlyFoo.x != 8:
  raise RuntimeError

# string attribute with get/set methods using return/pass by value
myStringyClass = li_attribute.MyStringyClass("initial string")
if myStringyClass.ReadWriteString != "initial string":
  raise RuntimeError
if myStringyClass.ReadOnlyString != "initial string":
  raise RuntimeError
myStringyClass.ReadWriteString = "changed string"
if myStringyClass.ReadWriteString != "changed string":
  raise RuntimeError
if myStringyClass.ReadOnlyString != "changed string":
  raise RuntimeError

