diff options
author | William Cohen <wcohen@redhat.com> | 2009-01-29 16:55:06 -0500 |
---|---|---|
committer | William Cohen <wcohen@redhat.com> | 2009-01-29 16:55:06 -0500 |
commit | 9fbda39bf7687ceeee28813f30f6e3ec5c72fc5d (patch) | |
tree | 591d46a22865cb745e368ca4325bf95ad93e7f70 /testsuite/systemtap.base/arith_limits.stp | |
parent | 8da0793017c9871b96cb9695ab10e9fa040c0a03 (diff) | |
download | systemtap-steved-9fbda39bf7687ceeee28813f30f6e3ec5c72fc5d.tar.gz systemtap-steved-9fbda39bf7687ceeee28813f30f6e3ec5c72fc5d.tar.xz systemtap-steved-9fbda39bf7687ceeee28813f30f6e3ec5c72fc5d.zip |
Move some systemtap.sample tests to systemtap.base.
Diffstat (limited to 'testsuite/systemtap.base/arith_limits.stp')
-rw-r--r-- | testsuite/systemtap.base/arith_limits.stp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/testsuite/systemtap.base/arith_limits.stp b/testsuite/systemtap.base/arith_limits.stp new file mode 100644 index 00000000..6c620830 --- /dev/null +++ b/testsuite/systemtap.base/arith_limits.stp @@ -0,0 +1,80 @@ +global testno, passes, failures + +function test (v,n1,n2) { + if (n1 == n2) { + passes ++ + result = "pass" + } else { + failures ++ + result = "fail" + } + printf ("test %d [%s]\t\t%s\n", testno++, v, result) +} + +# Exactly the same as test() except it will magically work for strings. +# Wouldn't it be nice if we didn't have to do this? + +function teststr (v,n1,n2) { + if (n1 == n2) { + passes ++ + result = "pass" + } else { + failures ++ + result = "fail" + } + printf ("test %d [%s]\t\t%s\n", testno++, v, result) +} + + + +probe begin { + # max/minimum signed 32-bit values. + # these could cause problems for 32-bit cpus when overflows + # occur into 64-but values + lmax = 0x7fffffff + lmin = -0x80000000 + + # max/minimum signed 64-bit values + llmax = 0x7fffffffffffffff + llmin = -0x7fffffffffffffff-1 + + # 32-bit limit tests + teststr ("string lmax", sprint(lmax), "2147483647") + teststr ("hex lmax", sprintf("0x%x", lmax), "0x7fffffff") + teststr ("string lmin", sprint(lmin), "-2147483648") + teststr ("hex lmin", sprintf("0x%x", lmin), "0xffffffff80000000") + test ("lmax/-1", lmax/-1, -2147483647); + test ("lmin/-1", lmin/-1, 2147483648); + test ("lmax +1", lmax+1, 2147483648); + test ("lmin -1", lmin-1, -2147483649); + + # 64-bit limits + teststr ("string llmax", sprint(llmax), "9223372036854775807") + teststr ("hex llmax", sprintf("0x%x", llmax), "0x7fffffffffffffff") + teststr ("string llmin", sprint(llmin), "-9223372036854775808") + teststr ("hex llmin", sprintf("0x%x", llmin), "0x8000000000000000") + test ("llmax/-1", llmax/-1, -llmax) + test ("llmax*-1", llmax*-1, -llmax) + + # the next three overflow and produce predictable, although + # wrong results + test ("llmin/-1", llmin/-1, llmin) + test ("llmin*-1", llmin*-1, llmin) + test ("llmax +1", llmax+1, llmin) + test ("llmin -1", llmin-1, llmax) + + # modulo tests + test ("llmax%1", llmax%1, 0) + test ("llmin%1", llmin%1, 0) + test ("0%1 ", 0%1, 0) + test ("0%lmax", 0%lmax, 0) + test ("1%lmax", 1%lmax, 1) + test ("0%lmin", 0%lmin, 0) + test ("1%lmin", 1%lmin, 1) + + exit() +} + +probe end { + printf ("passes: %d failures: %d\n", passes, failures) +} |