+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
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
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
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.
# 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;
}
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)
{
}
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)
{
# 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)
{
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)
{
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++)
{
--- /dev/null
+# 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
+
+
--- /dev/null
+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()
+}