diff --git a/tests/40core.tests b/tests/40core.tests index ebd97101d..4da9e1731 100644 --- a/tests/40core.tests +++ b/tests/40core.tests @@ -1386,20 +1386,21 @@ out: :50:49:48:47:46:45:44:43:42:41 out: :60 out: :70 out: :80:59:58:57:56:55:54:53:52:51 -out: :80$ +out: :90:69:68:67:66:65:64:63:62:61 +out: :100$ out: ---:assign_to_var -out: :60:99:137:174:210:245:279:312:344:375 -out: :435:474:512:549:585:620:654:687:719:750 -out: :810:789:788:787:786:785:784:783:782:781 -out: sum=750 -out: :60:99:137:174:210:245:279:312:344:375 -out: :435:474:512:549:585:620:654:687:719:750 -out: :810:789:788:787:786:785:784:783:782:781 -out: sum=750 -out: :60 -out: :120 +out: :90:149:207:264:320:375:429:482:534:585 +out: :675:734:792:849:905:960:1014:1067:1119:1170 +out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755 +out: sum=1755 +out: :90:149:207:264:320:375:429:482:534:585 +out: :675:734:792:849:905:960:1014:1067:1119:1170 +out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755 +out: sum=1755 +out: :90 out: :180 -out: sum=120 +out: :270 +out: sum=270 out: ---:assign_to_input out: :20:19:18:17:16:15:14:13:12:11 out: :30:29:28:27:26:25:24:23:22:21 @@ -1408,20 +1409,21 @@ out: :50:49:48:47:46:45:44:43:42:41 out: :60 out: :70 out: :80:59:58:57:56:55:54:53:52:51 -out: :80$ +out: :90:69:68:67:66:65:64:63:62:61 +out: :100$ out: ---:assign_to_var -out: :60:99:137:174:210:245:279:312:344:375 -out: :435:474:512:549:585:620:654:687:719:750 -out: :810:789:788:787:786:785:784:783:782:781 -out: sum=750 -out: :60:99:137:174:210:245:279:312:344:375 -out: :435:474:512:549:585:620:654:687:719:750 -out: :810:789:788:787:786:785:784:783:782:781 -out: sum=750 -out: :60 -out: :120 +out: :90:149:207:264:320:375:429:482:534:585 +out: :675:734:792:849:905:960:1014:1067:1119:1170 +out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755 +out: sum=1755 +out: :90:149:207:264:320:375:429:482:534:585 +out: :675:734:792:849:905:960:1014:1067:1119:1170 +out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755 +out: sum=1755 +out: :90 out: :180 -out: sum=120 +out: :270 +out: sum=270 out: ---:wrapped_container_passing out: :10:9:8:7:6:5:4:3:2:1 out: :-20:-21:-22:-23:-24:-25:-26:-27:-28:-29 diff --git a/tests/library/util-foreach-test.cpp b/tests/library/util-foreach-test.cpp index 601ea4615..6f8183264 100644 --- a/tests/library/util-foreach-test.cpp +++ b/tests/library/util-foreach-test.cpp @@ -156,7 +156,7 @@ namespace test { CHECK (int(NUM_ELMS) ==container[0]); check_ref_argument_bind (iterator); - CHECK (60+int(NUM_ELMS) ==container[0]); + CHECK (90+int(NUM_ELMS) ==container[0]); // changes got propagated through the iterator check_wrapped_container_passing(container); @@ -233,7 +233,11 @@ namespace test { /** @test under some circumstances, it is even possible * to take a ref to the data in the input sequence, - * or to a summation variable. + * or to a summation variable. In the example performed here, + * the function to be applied takes the 3rd argument by reference + * and assigns the sum of first and second argument to this parameter. + * If we us a bind variable at that position, we end up assigning + * by reference to the values contained in the collection. * @note in case of invoking this test with a Lumiera Forward Iterator, * the changes go through to the original container, in spite of * passing the iterator by value. This behaviour is correct, as @@ -256,13 +260,16 @@ namespace test { has_any (coll, function2, 5, 5, _1 ); _NL_ has_any (coll, &function2, 5, 5, _1 ); _NL_ - // note: when using a function object, - // instead of directly using a binder, - // the pass-by reference doesn't work + // note: in C++11, the reference parameters are passed through + // even when wrapping the function or function pointer into a function object, for_each (coll,fun2, 5, 5, _1 ); _NL_ and_all (coll, fun2, 5, 5, _1 ); _NL_ has_any (coll, fun2, 5, 5, _1 ); _NL_ + // at that point we have added 9 * (5+5) to the value at position zero. + // (note that the has_any only evaluates the function once) + + // the following test assigns the sum via the ref argument to a local variable. int sum=0; ANNOUNCE (assign_to_var); for_each (coll, function2, -10, _1, ref(sum) ); _NL_ @@ -417,7 +424,7 @@ namespace test { } - /** @test passing the collection to be iterated in various ways + /** @test pass the collection to be iterated in various ways * - anonymous temporary * - smart pointer * - pointer @@ -458,12 +465,12 @@ namespace test { CHECK (-2*int(NUM_ELMS) == counter); CHECK (bySmartPtr->back() == counter+1); - // passing by pointer is also possible + // passing the container by pointer is also possible const VecI * const passByConstPointer (&coll); for_each (passByConstPointer, _1_ = var(counter)-- ); SHOW_CONTAINER - // ...and influences the original container + // ...and does indeed influence the original container } };