From: dsmith Date: Tue, 21 Aug 2007 21:30:55 +0000 (+0000) Subject: 2007-08-21 David Smith X-Git-Tag: release-0.6~274 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=2b3eb687e25685636e73cf81af4c784532c0e2aa;p=systemtap.git 2007-08-21 David Smith * 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. --- diff --git a/testsuite/ChangeLog b/testsuite/ChangeLog index e07f80b96..fbe1143ef 100644 --- a/testsuite/ChangeLog +++ b/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2007-08-21 David Smith + + * 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 PR 4942 diff --git a/testsuite/systemtap.maps/foreach_limit.exp b/testsuite/systemtap.maps/foreach_limit.exp index bc4e6b9ee..06e797dab 100644 --- a/testsuite/systemtap.maps/foreach_limit.exp +++ b/testsuite/systemtap.maps/foreach_limit.exp @@ -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. diff --git a/testsuite/systemtap.maps/foreach_limit.stp b/testsuite/systemtap.maps/foreach_limit.stp index e2957678b..6ce0f361a 100644 --- a/testsuite/systemtap.maps/foreach_limit.stp +++ b/testsuite/systemtap.maps/foreach_limit.stp @@ -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 index 000000000..00696fe16 --- /dev/null +++ b/testsuite/systemtap.maps/foreach_limit2.exp @@ -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 index 000000000..22f9a7454 --- /dev/null +++ b/testsuite/systemtap.maps/foreach_limit2.stp @@ -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() +}