module Test
	use array.Array
	use ref.Ref
	use ref.Refint
	use int.Int

	let b [@bddinfer] [@infer](_:int): unit
	=
	 let y = 10 in
	 while (true) do
		variant { 0 }
		invariant { y = 10 }
	()
		done; ()

	let b2 [@bddinfer] [@infer:oct](_:int): unit
	=
	 let y = 10 in
	 while (true) do
		variant { 0 }
		invariant { y = 10 }
	()
		done; ()

	let b3 [@bddinfer] [@infer:box](_:int): unit
	=
	 let y = 10 in
	 while (true) do
		variant { 0 }
		invariant { y = 10 }
	()
		done; ()

	let c [@bddinfer] [@infer](_:int): unit
	=
	 let y = 10 in
	 let k = 42 in
	 while (true) do
		variant { 0 }
		invariant { y = 10 /\ k = 42 }
	()
		done; ()

	let c2 [@bddinfer] [@infer:oct](_:int): unit
	=
	 let y = 10 in
	 let k = 42 in
	 while (true) do
		variant { 0 }
		invariant { y = 10 /\ k = 42 }
	()
		done; ()

	let c3 [@bddinfer] [@infer:box](_:int): unit
	=
	 let y = 10 in
	 let k = 42 in
	 while (true) do
		variant { 0 }
		invariant { y = 10 /\ k = 42 }
	()
		done; ()


end
