module main
import forkedtest

struct SimpleEmptyStruct{
}

struct NonEmptyStruct{
  x int
  y int
  z int
}

fn check_simple_empty_struct(){  
  s := SimpleEmptyStruct{}
  addr_s := &s
  str_addr_s := ptr_str( addr_s )
  assert !isnil(addr_s)
  assert str_addr_s.len > 3
  println(str_addr_s)
}

fn check_non_empty_struct(){  
  a := NonEmptyStruct{1,2,3}
  b := NonEmptyStruct{4,5,6}
  assert sizeof(NonEmptyStruct) > 0
  assert sizeof(SimpleEmptyStruct) < sizeof(NonEmptyStruct)
  assert a.x == 1
  assert a.y == 2
  assert a.z == 3
  assert b.x + b.y + b.z == 15
  assert ptr_str(&a) != ptr_str(&b)
  println('sizeof SimpleEmptyStruct:' + i64_str( sizeof(SimpleEmptyStruct) , 10 ))
  println('sizeof NonEmptyStruct:' + i64_str( sizeof(NonEmptyStruct) , 10 ))
}

fn main(){
	mut fails := 0
	fails += forkedtest.normal_run(check_simple_empty_struct, "check_simple_empty_struct")
	fails += forkedtest.normal_run(check_non_empty_struct,    "check_non_empty_struct")
	assert fails == 0
	sys_exit(0)
}