#
#  PRE: if
#
uint32 test_integer1
uint32 test_integer2
date test_date

#
#  Simple
#
if (!(%{1 + 2 + 3 + 4} == 10)) {
	test_fail
}
if !(1 + 2 + 3 + 4 == 10) {
	test_fail
}

#
#  Precedence
#
if (!(%{1 + 2 * 3 + 4} == 11)) {
	test_fail
}
if !(1 + 2 * 3 + 4 == 11) {
	test_fail
}

#
#  attribute references
#
test_integer1 := 3
test_integer2 := 4
test_date := "%l"

if (!(%{ 1 + 2 * test_integer1 + 4} == 11)) {
	test_fail
}
if !(1 + 2 * test_integer1 + 4 == 11) {
	test_fail
}


if (!(%{ 1 + 2 * (test_integer1 + 4)} == 15)) {
	test_fail
}
if !(1 + 2 * (test_integer1 + 4) == 15) {
	test_fail
}

if (!(%{ 1 + 2 * (test_integer1 + test_integer2)} == 15)) {
	test_fail
}
if !(1 + 2 * (test_integer1 + test_integer2) == 15) {
	test_fail
}

if (!(%{ 1 & ~1} == 0)) {
	test_fail
}
if !((1 & ~1) == 0) {	# needs an extra () to resolve ambiguities and warnings
	test_fail
}

if (!(%{ 1 & ~2} == 1)) {
	test_fail
}
if !((1 & ~2) == 1) {	# needs an extra () to resolve ambiguities and warnings
	test_fail
}

if (!(%{ -1 * 2} == -2)) {
	test_fail
}
if !(-1 * 2 == -2) {
	test_fail
}

if (!(%{ 11 % 2} == 1)) {
	test_fail
}
if !(11 % 2 == 1) {
	test_fail
}

if (!(%{ 2 - -1} == 3)) {
	test_fail
}
if !(2 - -1 == 3) {
	test_fail
}

if (!(%{ 1 << 2 | 1} == 5)) {
	test_fail
}
if !(((1 << 2) | 1) == 5) {	# needs extra () to resolve precedence
	test_fail
}

if ("%{ test_date}" <= 0) {
	test_fail
}
if (test_date <= 0) {
	test_fail
}

#
#  Unary negation
#
if (!(%{ 6 + -(1 + 3)} == 2)) {
	test_fail
}
if !(6 + -(1 + 3) == 2) {
	test_fail
}

if (!(%{ 6 * -test_integer2} == -24)) {
	test_fail
}
if !(6 * -test_integer2 == -24) {
	test_fail
}

success
