
set kvr [exec uname -r]
set kv [exec uname -r | cut -f1 -d-]
# a pattern bound to match
set kr {[2345]?[0-9]*}
# a pattern bound to mismatch
set krx {?noSuchKernel*}

set arch [exec uname -i]
# normalize arch; PR4186
set arch [normalize_arch $arch]
set ar "?[string range $arch 1 end-1]?"
set arx {?noSuchArch?}

# This test works so that if all the preprocessor conditionals
# work as expected, stap will indicate no error.

foreach runtime [get_runtime_list] {
    set test "preprocessor basic ops"
    if {$runtime != ""} {
	lappend test "($runtime)"
	set runtime_arg "--runtime=$runtime"
    } else {
	set runtime "kernel"
	set runtime_arg ""
    }

    spawn stap -u -w -p2 ${runtime_arg} -e "probe never {}
    %( kernel_v == \"$kv\"          %? %: ERROR %)
    %( kernel_v == \"$kr\"          %? %: ERROR %)
    %( kernel_v == \"$krx\"         %? ERROR %: %)
    %( kernel_v != \"$kv\"          %? ERROR %: %)
    %( kernel_v != \"$kr\"          %? ERROR %: %)
    %( kernel_v != \"$krx\"         %? %: ERROR %)
    %( kernel_v < \"9.9999\"        %? %: ERROR %)
    %( kernel_v <= \"9.9999\"       %? %: ERROR %)
    %( kernel_v > \"9.9999\"        %? ERROR %: %)
    %( kernel_v >= \"9.9999\"       %? ERROR %: %)
    %( kernel_vr == \"$kvr\"        %? %: ERROR %)
    %( kernel_vr == \"$kr\"         %? %: ERROR %)
    %( kernel_vr == \"$krx\"        %? ERROR %: %)
    %( kernel_vr != \"$kvr\"        %? ERROR %: %)
    %( kernel_vr != \"$kr\"         %? ERROR %: %)
    %( kernel_vr != \"$krx\"        %? %: ERROR %)
    %( kernel_vr < \"9.9999\"       %? %: ERROR %)
    %( kernel_vr <= \"9.9999\"      %? %: ERROR %)
    %( kernel_vr > \"9.9999\"       %? ERROR %: %)
    %( kernel_vr >= \"9.9999\"      %? ERROR %: %)
    %( arch == \"$arch\"            %? %: ERROR %)
    %( arch == \"$ar\"              %? %: ERROR %)
    %( arch == \"$arx\"             %? ERROR %: %)
    %( arch != \"$arch\"            %? ERROR %: %)
    %( arch != \"$ar\"              %? ERROR %: %)
    %( arch != \"$arx\"             %? %: ERROR %)
    %( runtime == \"$runtime\"      %? %: ERROR %)
    %( runtime != \"$runtime\"      %? ERROR %: %)
    %( runtime == \"noSuchRuntime\" %? ERROR %: %)
    %( runtime != \"noSuchRuntime\" %? %: ERROR %)
    "
    set ok 0
    expect {
	"never" { incr ok }
	eof { }
	timeout { }
    }
    catch {close}; catch {wait}
    if {$ok == 1} { pass $test } { fail $test }
}
