summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Grunberg <rgrunber@redhat.com>2009-09-23 13:46:05 -0400
committerFrank Ch. Eigler <fche@elastic.org>2009-09-23 14:04:26 -0400
commit09846ceb72c27dfe87f0b5c8d0a6296fc09bbc36 (patch)
tree7134c0eb69051baf563a474048c7096bcc7dcfa4
parentdc0c46f5f74a9e0468236b31c8d9364eb24c3624 (diff)
downloadsystemtap-steved-09846ceb72c27dfe87f0b5c8d0a6296fc09bbc36.tar.gz
systemtap-steved-09846ceb72c27dfe87f0b5c8d0a6296fc09bbc36.tar.xz
systemtap-steved-09846ceb72c27dfe87f0b5c8d0a6296fc09bbc36.zip
PR10632: tapset: randint() function + tests
-rw-r--r--tapset/random.stp18
-rw-r--r--testsuite/systemtap.base/rand.exp3
-rw-r--r--testsuite/systemtap.base/rand.stp41
3 files changed, 62 insertions, 0 deletions
diff --git a/tapset/random.stp b/tapset/random.stp
new file mode 100644
index 00000000..e0a89d19
--- /dev/null
+++ b/tapset/random.stp
@@ -0,0 +1,18 @@
+/** @addtogroup library
+* The library tapset is a collection of standard functions.
+* @{
+*/
+
+function randint:long(min:long, max:long)
+%{
+
+ unsigned long difference = (unsigned long)(THIS->max - THIS->min);
+
+ if ( THIS->min >= THIS->max || (THIS->max -THIS->min) > (1024*1024) ){
+ CONTEXT->last_error = "either first argument was not strictly less than the second argument, or their difference was greater than (1024*1024)";
+ }
+ THIS->__retvalue = THIS->min + ( _stp_random_pm_u(2147483646) % (difference + 1) );
+
+%}
+
+/** @} */
diff --git a/testsuite/systemtap.base/rand.exp b/testsuite/systemtap.base/rand.exp
new file mode 100644
index 00000000..9b372e18
--- /dev/null
+++ b/testsuite/systemtap.base/rand.exp
@@ -0,0 +1,3 @@
+set test "rand"
+set ::result_string {PASS}
+stap_run2 $srcdir/$subdir/$test.stp
diff --git a/testsuite/systemtap.base/rand.stp b/testsuite/systemtap.base/rand.stp
new file mode 100644
index 00000000..aca80877
--- /dev/null
+++ b/testsuite/systemtap.base/rand.stp
@@ -0,0 +1,41 @@
+function checkStatus(status:long){
+ if (status == 1){
+ printf("%s\n","FAIL")
+ }else{
+ printf("%s\n","PASS")
+ }
+}
+
+probe begin
+{
+
+ for (i = 0; i < 100; i ++) {
+ num = randint(-5, 5)
+ if (num > 5) {
+ printf("NUMBER TOO HIGH\n")
+ }
+ if (num < -5) {
+ printf("NUMBER TOO LOW\n")
+ }
+ }
+
+ for (i = 0; i < 500; i ++) {
+ num = randint(-3, 3)
+ if (num > 3) {
+ printf("NUMBER TOO HIGH\n")
+ }
+ if (num < -3) {
+ printf("NUMBER TOO LOW\n")
+ }
+ }
+
+ status = 0
+ for (i=1; i <= 100; i++){
+ if ( randint(-1*i,i) < (-1*i) || randint(-1*i,i) > i ){
+ status = 1
+ }
+ }
+ checkStatus(status)
+
+ exit()
+}