]> sourceware.org Git - systemtap.git/commitdiff
2007-08-21 David Smith <dsmith@redhat.com>
authordsmith <dsmith>
Tue, 21 Aug 2007 21:30:55 +0000 (21:30 +0000)
committerdsmith <dsmith>
Tue, 21 Aug 2007 21:30:55 +0000 (21:30 +0000)
* foreach_limit.stp: Added test for sorting numeric arrays by
value.
* foreach_limit.exp: Ditto.

PR 2305
* foreach_limit2.stp: New file.  Tests sorting aggregate arrays by
value.
* foreach_limit2.exp: Ditto.

testsuite/ChangeLog
testsuite/systemtap.maps/foreach_limit.exp
testsuite/systemtap.maps/foreach_limit.stp
testsuite/systemtap.maps/foreach_limit2.exp [new file with mode: 0644]
testsuite/systemtap.maps/foreach_limit2.stp [new file with mode: 0755]

index e07f80b96182aaf2d7b00bf79c0c8cafe9aef4ef..fbe1143efb6b3a9b0ccf4e00e027cefb2b169015 100644 (file)
@@ -1,3 +1,14 @@
+2007-08-21  David Smith  <dsmith@redhat.com>
+
+       * foreach_limit.stp: Added test for sorting numeric arrays by
+       value.
+       * foreach_limit.exp: Ditto.
+
+       PR 2305
+       * foreach_limit2.stp: New file.  Tests sorting aggregate arrays by
+       value.
+       * foreach_limit2.exp: Ditto.
+
 2007-08-21  Frank Ch. Eigler  <fche@elastic.org>
 
        PR 4942
index bc4e6b9eefff856dac0bc304600761ad28d9155c..06e797dabef711a404991c048b527cec5d5be539 100644 (file)
@@ -5,11 +5,11 @@ set test "foreach_limit"
 set ::result_string {Arrays:
 unsorted:
 key 9, value 18
-key 1, value 2
+key 1, value 40
 key 8, value 16
 key 2, value 4
 key 7, value 14
-key 3, value 6
+key 3, value 36
 key 6, value 12
 key 5, value 10
 key 4, value 8
@@ -17,48 +17,56 @@ key 10, value 20
 
 unsorted limit 5:
 key 9, value 18
-key 1, value 2
+key 1, value 40
 key 8, value 16
 key 2, value 4
 key 7, value 14
 loop had 5 iterations
 
-sorted limit 5:
-key 1, value 2
+sorted (by values) limit 5:
 key 2, value 4
-key 3, value 6
+key 4, value 8
+key 5, value 10
+key 6, value 12
+key 7, value 14
+loop had 5 iterations
+
+sorted (by keys) limit 5:
+key 1, value 40
+key 2, value 4
+key 3, value 36
 key 4, value 8
 key 5, value 10
 loop had 5 iterations
 
-sorted limit x (3):
-key 1, value 2
+sorted (by values) limit x (3):
 key 2, value 4
-key 3, value 6
+key 4, value 8
+key 5, value 10
 loop had 3 iterations
 
-sorted limit x * 2 (6):
-key 1, value 2
+sorted (by values) limit x * 2 (6):
 key 2, value 4
-key 3, value 6
 key 4, value 8
 key 5, value 10
 key 6, value 12
+key 7, value 14
+key 8, value 16
 loop had 6 iterations
 
-sorted limit ++x:
-key 1, value 2
+sorted (by values) limit ++x:
 key 2, value 4
-key 3, value 6
 key 4, value 8
+key 5, value 10
+key 6, value 12
 loop had 4 iterations
 x ended up as 4
 
-sorted limit x++:
-key 1, value 2
+sorted (by values) limit x++:
 key 2, value 4
-key 3, value 6
 key 4, value 8
+key 5, value 10
+key 6, value 12
 loop had 4 iterations
 x ended up as 5
 
@@ -68,9 +76,9 @@ Aggregates:
 aggregate limit 5:
 bucket 0: 0
 bucket 1: 0
-bucket 2: 1
-bucket 3: 4
-bucket 4: 11
+bucket 2: 0
+bucket 3: 1
+bucket 4: 6
 loop had 5 iterations
 
 Done.
index e2957678b3b010ffcb0a6f92942be1a863ba6c36..6ce0f361a088f8e9978dc1d85cc0c070121a9739 100644 (file)
@@ -9,11 +9,11 @@ probe begin
 
     # Add elements to the array, but in an unsorted order
     array[9] = 18;
-    array[1] = 2
+    array[1] = 40
     array[8] = 16
     array[2] = 4
     array[7] = 14
-    array[3] = 6
+    array[3] = 36
     array[6] = 12;
     array[5] = 10;
     array[4] = 8;
@@ -34,8 +34,8 @@ probe begin
     }
     printf("loop had %d iterations\n", i);
 
-    # Print the first 5 sorted array items
-    printf("\nsorted limit 5:\n");
+    # Print the first 5 sorted array items (by value)
+    printf("\nsorted (by values) limit 5:\n");
     i = 0
     foreach (key in array+ limit 5)
     {
@@ -44,9 +44,19 @@ probe begin
     }
     printf("loop had %d iterations\n", i);
 
+    # Print the first 5 sorted array items (by key)
+    printf("\nsorted (by keys) limit 5:\n");
+    i = 0
+    foreach (key+ in array limit 5)
+    {
+       printf("key %d, value %d\n", key, array[key]);
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+
     # Use a variable reference to limit the loop iteration
     x = 3
-    printf("\nsorted limit x (%d):\n", x);
+    printf("\nsorted (by values) limit x (%d):\n", x);
     i = 0
     foreach (key in array+ limit x)
     {
@@ -57,7 +67,7 @@ probe begin
 
     # Use a expression containing a variable reference to limit the
     # loop iteration
-    printf("\nsorted limit x * 2 (%d):\n", (x * 2));
+    printf("\nsorted (by values) limit x * 2 (%d):\n", (x * 2));
     i = 0
     foreach (key in array+ limit x * 2)
     {
@@ -67,7 +77,7 @@ probe begin
     printf("loop had %d iterations\n", i);
 
     # Ensure the expression is only evaluated once
-    printf("\nsorted limit ++x:\n");
+    printf("\nsorted (by values) limit ++x:\n");
     i = 0
     foreach (key in array+ limit ++x)
     {
@@ -78,7 +88,7 @@ probe begin
     printf("x ended up as %d\n", x);
 
     # Ensure the expression is only evaluated once
-    printf("\nsorted limit x++:\n");
+    printf("\nsorted (by values) limit x++:\n");
     i = 0
     foreach (key in array+ limit x++)
     {
diff --git a/testsuite/systemtap.maps/foreach_limit2.exp b/testsuite/systemtap.maps/foreach_limit2.exp
new file mode 100644 (file)
index 0000000..00696fe
--- /dev/null
@@ -0,0 +1,90 @@
+# Test of foreach statements using "limit EXP".
+
+set test "foreach_limit2"
+
+set ::result_string {Arrays of aggregates:
+unsorted:
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[2]: count:4  sum:22  avg:5  min:2  max:12
+agg_array[7]: count:3  sum:63  avg:21  min:7  max:42
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[9]: count:5  sum:84  avg:16  min:1  max:54
+agg_array[1]: count:5  sum:185  avg:37  min:2  max:120
+agg_array[6]: count:2  sum:18  avg:9  min:6  max:12
+agg_array[3]: count:3  sum:162  avg:54  min:18  max:108
+agg_array[8]: count:4  sum:75  avg:18  min:3  max:48
+
+sorted (by values):
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[6]: count:2  sum:18  avg:9  min:6  max:12
+agg_array[7]: count:3  sum:63  avg:21  min:7  max:42
+agg_array[3]: count:3  sum:162  avg:54  min:18  max:108
+agg_array[2]: count:4  sum:22  avg:5  min:2  max:12
+agg_array[8]: count:4  sum:75  avg:18  min:3  max:48
+agg_array[9]: count:5  sum:84  avg:16  min:1  max:54
+agg_array[1]: count:5  sum:185  avg:37  min:2  max:120
+
+unsorted limit 5:
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[2]: count:4  sum:22  avg:5  min:2  max:12
+agg_array[7]: count:3  sum:63  avg:21  min:7  max:42
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+loop had 5 iterations
+
+sorted (by values) limit 5:
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[6]: count:2  sum:18  avg:9  min:6  max:12
+agg_array[7]: count:3  sum:63  avg:21  min:7  max:42
+loop had 5 iterations
+
+sorted (by keys) limit 5:
+agg_array[1]: count:5  sum:185  avg:37  min:2  max:120
+agg_array[2]: count:4  sum:22  avg:5  min:2  max:12
+agg_array[3]: count:3  sum:162  avg:54  min:18  max:108
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+loop had 5 iterations
+
+sorted (by values) limit x (3):
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+loop had 3 iterations
+
+sorted (by values) limit x * 2 (6):
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[6]: count:2  sum:18  avg:9  min:6  max:12
+agg_array[7]: count:3  sum:63  avg:21  min:7  max:42
+agg_array[3]: count:3  sum:162  avg:54  min:18  max:108
+loop had 6 iterations
+
+sorted (by values) limit ++x:
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[6]: count:2  sum:18  avg:9  min:6  max:12
+loop had 4 iterations
+x ended up as 4
+
+sorted (by values) limit x++:
+agg_array[10]: count:1  sum:20  avg:20  min:20  max:20
+agg_array[4]: count:1  sum:8  avg:8  min:8  max:8
+agg_array[5]: count:2  sum:15  avg:7  min:5  max:10
+agg_array[6]: count:2  sum:18  avg:9  min:6  max:12
+loop had 4 iterations
+x ended up as 5
+
+Done.
+}
+
+stap_run2 $srcdir/$subdir/$test.stp
+
+
diff --git a/testsuite/systemtap.maps/foreach_limit2.stp b/testsuite/systemtap.maps/foreach_limit2.stp
new file mode 100755 (executable)
index 0000000..22f9a74
--- /dev/null
@@ -0,0 +1,163 @@
+global agg_array
+
+probe begin
+{
+    #
+    # Array section
+    #
+    printf("\nArrays of aggregates:\n");
+
+    # Add elements to the array of aggregates, but in an unsorted order
+    agg_array[9] <<< 18
+    agg_array[1] <<< 40
+    agg_array[8] <<< 16
+    agg_array[2] <<< 4
+    agg_array[7] <<< 14
+    agg_array[3] <<< 36
+    agg_array[6] <<< 12
+    agg_array[5] <<< 10
+    agg_array[4] <<< 8
+    agg_array[10] <<< 20
+
+    agg_array[9] <<< 18 / 2
+    agg_array[1] <<< 40 / 2
+    agg_array[8] <<< 16 / 2
+    agg_array[2] <<< 4 / 2
+    agg_array[7] <<< 14 / 2
+    agg_array[3] <<< 36 / 2
+    agg_array[6] <<< 12 / 2
+    agg_array[5] <<< 10 / 2
+
+    agg_array[9] <<< 18 * 3
+    agg_array[1] <<< 40 * 3
+    agg_array[8] <<< 16 * 3
+    agg_array[2] <<< 4 * 3
+    agg_array[7] <<< 14 * 3
+    agg_array[3] <<< 36 * 3
+
+    agg_array[9] <<< 1
+    agg_array[1] <<< 2
+    agg_array[8] <<< 3
+    agg_array[2] <<< 4
+
+    agg_array[9] <<< 2
+    agg_array[1] <<< 3
+
+    # Print the unsorted array
+    printf("unsorted:\n");
+    foreach (key in agg_array)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+    }
+
+    # Print the sorted array (by value)
+    printf("\nsorted (by values):\n");
+    foreach (key in agg_array+)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+    }
+
+    # Print the first 5 unsorted array items
+    printf("\nunsorted limit 5:\n");
+    i = 0
+    foreach (key in agg_array limit 5)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+
+    # Print the first 5 sorted array items (by value)
+    printf("\nsorted (by values) limit 5:\n");
+    i = 0
+    foreach (key in agg_array+ limit 5)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+
+    # Print the first 5 sorted array items (by key)
+    printf("\nsorted (by keys) limit 5:\n");
+    i = 0
+    foreach (key+ in agg_array limit 5)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+
+    # Use a variable reference to limit the loop iteration
+    x = 3
+    printf("\nsorted (by values) limit x (%d):\n", x);
+    i = 0
+    foreach (key in agg_array+ limit x)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+
+    # Use a expression containing a variable reference to limit the
+    # loop iteration
+    printf("\nsorted (by values) limit x * 2 (%d):\n", (x * 2));
+    i = 0
+    foreach (key in agg_array+ limit x * 2)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+
+    # Ensure the expression is only evaluated once
+    printf("\nsorted (by values) limit ++x:\n");
+    i = 0
+    foreach (key in agg_array+ limit ++x)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+    printf("x ended up as %d\n", x);
+
+    # Ensure the expression is only evaluated once
+    printf("\nsorted (by values) limit x++:\n");
+    i = 0
+    foreach (key in agg_array+ limit x++)
+    {
+       printf("agg_array[%d]: count:%d  sum:%d  avg:%d  min:%d  max:%d\n", 
+              key, @count(agg_array[key]), @sum(agg_array[key]),
+              @avg(agg_array[key]), @min(agg_array[key]),
+              @max(agg_array[key]))
+       i++;
+    }
+    printf("loop had %d iterations\n", i);
+    printf("x ended up as %d\n", x);
+
+    printf("\nDone.\n");
+    exit()
+}
This page took 0.03955 seconds and 5 git commands to generate.