From 2b3eb687e25685636e73cf81af4c784532c0e2aa Mon Sep 17 00:00:00 2001 From: dsmith Date: Tue, 21 Aug 2007 21:30:55 +0000 Subject: 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. --- testsuite/systemtap.maps/foreach_limit2.stp | 163 ++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100755 testsuite/systemtap.maps/foreach_limit2.stp (limited to 'testsuite/systemtap.maps/foreach_limit2.stp') 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() +} -- cgit