struct A{
mut: 
	val int 
	nums []int 
} 

struct B{
mut: 
	a A 
} 

struct C {
mut: 
	b B 
	nums []int 
	aarr []A 
	num int 
} 

struct User {
	name string
	age int 
} 

struct Foo {
	@type string 
} 
 
fn test_struct_levels() { 
	mut c := C{} 
	assert c.nums.len == 0 
	c.nums << 3 
	assert c.nums.len == 1 
	assert c.nums[0] == 3 
	c.nums[0] = 4 
	assert c.nums[0] == 4 
	c.b.a.val = 34 
	assert c.b.a.val == 34 
	c.b.a.nums = [0;0] 
	c.b.a.nums << 0 
	c.b.a.nums << 2 
	assert c.b.a.nums.len == 2 
	assert c.b.a.nums[0] == 0 
	assert c.b.a.nums[1] == 2 
	c.b.a.nums [0] = 7 
	assert c.b.a.nums[0] == 7 
	c.aarr << A{val:8} 
	assert c.aarr.len == 1 
	assert c.aarr[0].val == 8 
	c.num = 20 
	assert c.num == 20 
	c.aarr[0].val  = 10 
	assert c.aarr[0].val == 10 
} 

fn test_struct_str() {
	u := User{'Bob', 30} 
	println(u)  // make sure the struct is printable 
	// assert u.str() == '{name:"Bob", age:30}'  // TODO 
} 

fn test_at() {
	foo := Foo{ @type: 'test' } 
	println(foo.@type) 
} 
