type Node = Expr | string
type Expr = IfExpr | IntegerLiteral

struct IntegerLiteral {}

struct IfExpr {
	pos int
}

struct NodeWrapper {
	node Node
}

fn test_nested_sumtype_selector() {
	c := NodeWrapper{Node(Expr(IfExpr{
		pos: 1
	}))}
	for c.node is Expr {
		assert typeof(c.node).name == 'Node'
		break
	}
}

struct Milk {
mut:
	name string
}

struct Eggs {
mut:
	name string
}

type Food = Eggs | Milk

struct FoodWrapper {
mut:
	food Food
}

fn test_match_mut() {
	mut f := Food(Eggs{'test'})
	for mut f is Eggs {
		f.name = 'eggs'
		assert f.name == 'eggs'
		break
	}
}

fn test_conditional_break() {
	mut f := Food(Eggs{'test'})
	for mut f is Eggs {
		f = Milk{'test'}
	}
	assert true
}
