#
# PRE: update if
#
update {
       control:Cleartext-Password := 'hello'
       reply:Filter-Id := 'filter'
}

update request {
	Tmp-String-0 := 'foo'
	Tmp-String-0 += 'bar'
	Tmp-String-0 += 'baz'

	Tmp-String-1 := 'GROUP ADMINISTRATORS'
	Tmp-String-1 += 'GROUP STUDENTS'
	Tmp-String-1 += 'GROUP PEONS'

	Tmp-String-2 := 'PEONS'
	Tmp-String-2 += 'STUDENTS'
	Tmp-String-2 += 'ADMINISTRATORS'

	Tmp-String-3 := 'no'
	Tmp-String-3 += 'no'
	Tmp-String-3 += 'yes'

	Tmp-Integer-0 := 1
	Tmp-Integer-0 += 2
	Tmp-Integer-0 += 5
}

update control {
	Tmp-String-0 := 'foo'
	Tmp-String-0 += 'bar'
	Tmp-String-0 += 'baz'

	Tmp-String-1 := 'boink'
	Tmp-String-1 += 'tard'
	Tmp-String-1 += 'dink'
	Tmp-String-1 += 'slink'

	Tmp-Integer-0 := 01
	Tmp-Integer-0 += 02
	Tmp-Integer-0 += 05
	Tmp-Integer-0 += 04

	Tmp-Integer-1 := 10
	Tmp-Integer-1 += 20
	Tmp-Integer-1 += 30
}

#
#  Mmmm O(N^2)
#
if (&request:Tmp-String-0[*] != &control:Tmp-String-0[*]) {
	update reply {
		Filter-Id += 'fail 0'
	}
}

if (&request:Tmp-String-0[*] == &control:Tmp-String-1[*]) {
	update reply {
		Filter-Id += 'fail 1'
	}
}

if (&request:Tmp-String-1[*] == &control:Tmp-String-0[*]) {
	update reply {
		Filter-Id += 'fail 2'
	}
}

#
#  Integer comparison and normalisation
#
if (&request:Tmp-Integer-0 != &control:Tmp-Integer-0) {
	update reply {
		Filter-Id += 'fail 3'
	}
}

#
#  if any value of request:Tmp-Integer-0 > any value of
#  request:Tmp-Integer-1 then evaluate to true
#
if (&request:Tmp-Integer-0[*] > &control:Tmp-Integer-1[*]) {
	update reply {
		Filter-Id += 'fail 4'
	}
}

#
#  Compiled regex comparisons
#
if (&request:Tmp-String-1[*] !~ /PEONS$/) {
	update reply {
		Filter-Id += 'fail 5'
	}
}

if (&control:Tmp-String-1 =~ /PEONS$/) {
	update reply {
		Filter-Id += 'fail 6'
	}
}

if (&control:Tmp-String-1 =~ /DINKS$/) {
	update reply {
		Filter-Id += 'fail 7'
	}
}

#
#  Dynamic regex comparisons
#
if (&request:Tmp-String-1[*] !~ /%{Tmp-String-2[0]}$/) {
	update reply {
		Filter-Id += 'fail 8'
	}
}

if (&request:Tmp-String-1 =~ /%{Tmp-String-2[1]}$/) {
	update reply {
		Filter-Id += 'fail 9'
	}
}

if (&request:Tmp-String-1 !~ /%{Tmp-String-2[2]}$/) {
	update reply {
		Filter-Id += 'fail 10'
	}
}

if (&request:Tmp-String-1 =~ /%{Tmp-String-2[#]}$/) {
	update reply {
		Filter-Id += 'fail 11'
	}
}

#
#  XLAT virtual comparisons
#
if (&control:Tmp-Integer-0[*] != "%{control:Tmp-Integer-0[#]}") {
	update reply {
		Filter-Id += 'fail 12'
	}
}

#
#  Literal comparisons
#
if (&control:Tmp-String-1[*] != 'boink') {
	update reply {
		Filter-Id += 'fail 13'
	}
}

if (&control:Tmp-String-1[*] == 'foo') {
	update reply {
		Filter-Id += 'fail 14'
	}
}

if (&request:Tmp-Integer-0[*] > 10) {
	update reply {
		Filter-Id += 'fail 15'
	}
}

if (!(&request:Tmp-Integer-0[*] < 10)) {
	update reply {
		Filter-Id += 'fail 16'
	}
}
