pub const (
	a   = b
	ccc = a + b
	b   = 1
	d   = (e / 2) + 7
	e   = 9
)

pub const x = 10

fn test_const() {
	assert d == 11
	//
	assert b == 1
	assert a == 1
	assert ccc == a + b
	assert e == 9
	assert d == (e / 2) + 7
}

// const option test
struct Foo {
	name string = 'foo'
}

fn foo_decode(name string) !Foo {
	if name == 'baz' {
		return error('baz is not allowed')
	}
	return Foo{name}
}

pub const (
	def = foo_decode('baz') or { Foo{} }
	bar = foo_decode('bar')!
)

fn test_opt_const() {
	assert def.name == 'foo'
	assert bar.name == 'bar'
}

// const with expressions that compile to multiple C statements
pub const (
	abc = [1, 2, 3].map(it * it)
	ghi = [1, 2, 3, 4, 5].filter(it % 2 == 0)
	jkl = [`a`, `b`, `c`].contains(`d`)
)

fn test_multistmt_const() {
	assert abc[2] == 9
	assert ghi.len == 2
	assert jkl == false
}
