summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.maps/foreach_limit2.stp
diff options
context:
space:
mode:
authordsmith <dsmith>2007-08-21 21:30:55 +0000
committerdsmith <dsmith>2007-08-21 21:30:55 +0000
commit2b3eb687e25685636e73cf81af4c784532c0e2aa (patch)
treed894353f89804203d39728b0883175c979a4d356 /testsuite/systemtap.maps/foreach_limit2.stp
parent6a59236bb21bf7f19faa6ce5332d21bb9c90e14e (diff)
downloadsystemtap-steved-2b3eb687e25685636e73cf81af4c784532c0e2aa.tar.gz
systemtap-steved-2b3eb687e25685636e73cf81af4c784532c0e2aa.tar.xz
systemtap-steved-2b3eb687e25685636e73cf81af4c784532c0e2aa.zip
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.
Diffstat (limited to 'testsuite/systemtap.maps/foreach_limit2.stp')
-rwxr-xr-xtestsuite/systemtap.maps/foreach_limit2.stp163
1 files changed, 163 insertions, 0 deletions
diff --git a/testsuite/systemtap.maps/foreach_limit2.stp b/testsuite/systemtap.maps/foreach_limit2.stp
new file mode 100755
index 00000000..22f9a745
--- /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()
+}