libstdc++: Improve tests for constexpr algorithms

These tests just return true without checking that the results of the
algorithms. Although it should be safe to assume that the algorithms
behave the same at compile-time as at run-time, we can use these tests
to verify it.

This replaces each 'return true' statement with a condition that depends
on the basic functionality of the algorithm, such as returning an
iterator to the right position.

libstdc++-v3/ChangeLog:

	* testsuite/25_algorithms/all_of/constexpr.cc: Check result of
	the algorithm.
	* testsuite/25_algorithms/any_of/constexpr.cc: Likewise.
	* testsuite/25_algorithms/binary_search/constexpr.cc: Likewise.
	* testsuite/25_algorithms/copy_backward/constexpr.cc: Likewise.
	* testsuite/25_algorithms/count/constexpr.cc: Likewise.
	* testsuite/25_algorithms/equal/constexpr.cc: Likewise.
	* testsuite/25_algorithms/equal_range/constexpr.cc: Likewise.
	* testsuite/25_algorithms/fill/constexpr.cc: Likewise.
	* testsuite/25_algorithms/find_end/constexpr.cc: Likewise.
	* testsuite/25_algorithms/find_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/is_partitioned/constexpr.cc: Likewise.
	* testsuite/25_algorithms/is_permutation/constexpr.cc: Likewise.
	* testsuite/25_algorithms/is_sorted_until/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/lexicographical_compare/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/lower_bound/constexpr.cc: Likewise.
	* testsuite/25_algorithms/merge/constexpr.cc: Likewise.
	* testsuite/25_algorithms/mismatch/constexpr.cc: Likewise.
	* testsuite/25_algorithms/none_of/constexpr.cc: Likewise.
	* testsuite/25_algorithms/partition_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/remove_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/remove_copy_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/remove_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/replace_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/reverse/constexpr.cc: Likewise.
	* testsuite/25_algorithms/reverse_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/rotate_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/search/constexpr.cc: Likewise.
	* testsuite/25_algorithms/set_difference/constexpr.cc: Likewise.
	* testsuite/25_algorithms/set_intersection/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/set_symmetric_difference/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/set_union/constexpr.cc: Likewise.
	* testsuite/25_algorithms/unique_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/upper_bound/constexpr.cc: Likewise.
This commit is contained in:
Jonathan Wakely 2020-10-29 14:47:18 +00:00
parent 822c1d21a3
commit 8c84486bba
33 changed files with 83 additions and 54 deletions

View File

@ -23,13 +23,12 @@
constexpr std::array<int, 6> cae{{0, 2, 4, 6, 8, 10}};
constexpr auto out2 = std::all_of(cae.begin(), cae.end(),
constexpr auto out1 = std::all_of(cae.begin(), cae.end(),
[](int i){ return i % 2 == 0; });
constexpr bool
test()
{
return true;
}
static_assert(out1);
static_assert(test());
constexpr auto out2 = std::all_of(cae.begin(), cae.end(),
[](int i){ return i != 8; });
static_assert(!out2);

View File

@ -29,7 +29,10 @@ test()
const auto out3 = std::any_of(ca0.begin(), ca0.end(),
[](int i){ return i % 2 == 0; });
return true;
const auto out4 = std::any_of(ca0.begin(), ca0.end(),
[](int i){ return i == -1; });
return out3 && !out4;
}
static_assert(test());

View File

@ -31,7 +31,10 @@ test()
const auto out5 = std::binary_search(ca0.begin(), ca0.end(), 5,
std::less<int>());
return true;
const auto out6 = std::binary_search(ca0.begin(), ca0.end(), 4.5,
std::less<>());
return out4 && out5 && !out6;
}
static_assert(test());

View File

@ -30,7 +30,7 @@ test()
const auto out7 = std::copy_backward(ca0.begin(), ca0.begin() + 8,
ma0.begin() + 10);
return true;
return out7 == ma0.begin() + 2 && ma0[3] == 1;
}
static_assert(test());

View File

@ -28,7 +28,9 @@ test()
const auto out8 = std::count(ca0.begin(), ca0.end(), 6);
return true;
const auto out9 = std::count(ca0.begin(), ca0.end(), 16);
return out8 == 1 && out9 == 0;
}
static_assert(test());

View File

@ -33,7 +33,12 @@ test()
const auto outb = std::equal(ca0.begin(), ca0.end(), cas.begin(),
[](int i, int j){ return i + 3 == j; });
return true;
auto ca2 = ca0;
ca2[5] = -1;
const auto outc = std::equal(ca0.begin(), ca0.end(), ca2.begin());
return outa && outb && !outc;
}
static_assert(test());

View File

@ -28,7 +28,8 @@ test()
const auto outc = std::equal_range(car.begin(), car.end(), 6);
return true;
return outc.first == (car.begin() + 6)
&& outc.second == (car.begin() + 8);
}
static_assert(test());

View File

@ -27,7 +27,7 @@ test()
std::array<int, 12> ma0{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
std::fill(ma0.begin(), ma0.end(), 66);
return true;
return ma0[4] == 66 && ma0[7] == 66;
}
static_assert(test());

View File

@ -24,7 +24,7 @@
constexpr bool
test()
{
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 3> cam{{4, 5, 6}};
constexpr std::array<int, 3> camm{{-4, -5, -6}};
@ -35,7 +35,7 @@ test()
camm.begin(), camm.end(),
[](int i, int j){ return i + 1 == -j; });
return true;
return outf == (ca0.begin() + 4) && outg == (ca0.begin() + 3);
}
static_assert(test());

View File

@ -24,12 +24,12 @@
constexpr bool
test()
{
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
const auto outj = std::find_if(ca0.begin(), ca0.end(),
[](int i){ return i == 6; });
return true;
return outj == (ca0.begin() + 6);
}
static_assert(test());

View File

@ -29,7 +29,7 @@ test()
const auto outs = std::is_partitioned(caeo.begin(), caeo.end(),
[](int i){ return i % 2 == 0; });
return true;
return outs;
}
static_assert(test());

View File

@ -29,7 +29,9 @@ test()
const auto outt = std::is_permutation(ca0.begin(), ca0.end(), cap.begin());
return true;
const auto outf = std::is_permutation(ca0.begin() + 1, ca0.end(), cap.begin());
return outt && !outf;
}
static_assert(test());

View File

@ -31,7 +31,10 @@ test()
const auto outy = std::is_sorted_until(aus.begin(), aus.end(),
std::less<int>());
return true;
const auto outz = std::is_sorted_until(outx - 1, aus.end(),
std::greater<int>());
return outx == aus.begin() + 7 && outy == outx && outz == (outx + 1);
}
static_assert(test());

View File

@ -34,7 +34,7 @@ test()
ca1.begin(), ca1.end(),
std::less<int>());
return true;
return outz && outaa;
}
static_assert(test());

View File

@ -31,7 +31,7 @@ test()
const auto outcc = std::lower_bound(ca0.begin(), ca0.end(), 6,
std::less<int>());
return true;
return outbb == (ca0.begin() + 6) && outcc == outbb;
}
static_assert(test());

View File

@ -31,12 +31,14 @@ test()
const auto outdd = std::merge(ca0.begin(), ca0.end(),
cas.begin(), cas.end(), out0.begin());
if (outdd != out0.end())
return false;
const auto outee = std::merge(ca0.begin(), ca0.end(),
camm.begin(), camm.end(), out0.begin(),
[](int i, int j){ return i < j; });
return true;
return outee == (out0.begin() + ca0.size() + camm.size());
}
static_assert(test());

View File

@ -32,7 +32,8 @@ test()
const auto outgg = std::mismatch(ca0.begin(), ca0.end(), cax.begin(),
std::equal_to<int>());
return true;
return outff.first == (ca0.begin() + 6) && outff.second == (cax.begin() + 6)
&& outgg == outff;
}
static_assert(test());

View File

@ -29,7 +29,7 @@ test()
const auto outhh = std::none_of(ca0.begin(), ca0.end(),
[](int i){ return i > 12; });
return true;
return outhh;
}
static_assert(test());

View File

@ -32,7 +32,8 @@ test()
out0.begin(), out1.begin(),
[](int i){ return i % 2 == 0; });
return true;
return outii.first == (out0.begin() + 6) && out0[1] == 2
&& outii.second == (out1.begin() + 6) && out1[1] == 3;
}
static_assert(test());

View File

@ -24,12 +24,12 @@
constexpr bool
test()
{
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
std::array<int, 24> out0{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
const auto outmm = std::remove_copy(ca0.begin(), ca0.end(), out0.begin(), 6);
return true;
return outmm == out0.begin() + ca0.size() - 1;
}
static_assert(test());

View File

@ -30,7 +30,7 @@ test()
const auto outnn = std::remove_copy_if(ca0.begin(), ca0.end(), out0.begin(),
[](int i){ return i == 7; });
return true;
return outnn == out0.begin() + ca0.size() - 1;
}
static_assert(test());

View File

@ -29,7 +29,7 @@ test()
const auto outll = std::remove_if(ac2.begin(), ac2.end(),
[](int i){ return i == 7; });
return true;
return outll == (ac2.end() - 1) && ac2[7] == 8;
}
static_assert(test());

View File

@ -28,7 +28,9 @@ test()
std::replace_if(ar0.begin(), ar0.end(), [](int i){ return i % 2 == 1; }, 42);
return true;
std::array<int, 12> ar1{{0, 42, 2, 42, 4, 42, 6, 6, 8, 42, 42, 42}};
return ar0 == ar1;
}
static_assert(test());

View File

@ -23,8 +23,6 @@
constexpr bool
test()
{
auto ok = true;
std::array<int, 12> ar0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
std::reverse(ar0.begin() + 2, ar0.begin() + 9);

View File

@ -29,7 +29,7 @@ test()
const auto outqq = std::reverse_copy(ca0.rbegin(), ca0.rend(), out0.begin());
return true;
return outqq == (out0.begin() + ca0.size()) && out0[3] == 3;
}
static_assert(test());

View File

@ -30,7 +30,7 @@ test()
const auto outrr = std::rotate_copy(ca0.begin(), ca0.begin() + 6,
ca0.end(), out0.begin());
return true;
return outrr == (out0.begin() + ca0.size()) && out0[3] == 9 && out0[8] == 2;
}
static_assert(test());

View File

@ -24,7 +24,7 @@
constexpr bool
test()
{
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 3> cam{{4, 5, 6}};
const auto outtt = std::search(ca0.begin(), ca0.end(),
@ -35,7 +35,7 @@ test()
= std::search(ca0.begin(), ca0.end(),
std::default_searcher(cam.begin(), cam.end()));
return true;
return outtt == (ca0.begin() + 4) && outtt2 == outtt;
}
static_assert(test());

View File

@ -29,13 +29,16 @@ test()
std::array<int, 24> out0{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
const auto outvv = std::set_difference(ca0.begin(), ca0.end(),
cas.begin(), cas.end(), out0.begin());
cas.begin(), cas.end(),
out0.begin());
const auto outww = std::set_difference(ca0.begin(), ca0.end(),
cas.begin(), cas.end(),
out0.begin(), std::less<int>());
outvv,
std::less<int>());
return true;
return outvv == (out0.begin() + 3) && outww == (outvv + 3);
}
static_assert(test());

View File

@ -36,7 +36,7 @@ test()
cas.begin(), cas.end(),
out0.begin(), std::less<int>());
return true;
return outxx == (out0.begin() + 9) && outyy == outxx;
}
static_assert(test());

View File

@ -25,17 +25,19 @@ constexpr bool
test()
{
constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
constexpr std::array<int, 12> cas{{3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}};
constexpr std::array<int, 12> cas{{4, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13}};
std::array<int, 24> out0{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
const auto outvv = std::set_difference(ca0.begin(), ca0.end(),
cas.begin(), cas.end(), out0.begin());
const auto outvv = std::set_symmetric_difference(ca0.begin(), ca0.end(),
cas.begin(), cas.end(),
out0.begin());
const auto outww = std::set_difference(ca0.begin(), ca0.end(),
cas.begin(), cas.end(),
out0.begin(), std::less<int>());
const auto outww = std::set_symmetric_difference(ca0.begin(), ca0.end(),
cas.begin(), cas.end(),
out0.begin(),
std::less<int>());
return true;
return outvv == (out0.begin() + 8) && outww == outvv;
}
static_assert(test());

View File

@ -29,13 +29,14 @@ test()
std::array<int, 24> out0{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
const auto out11 = std::set_union(ca0.begin(), ca0.end(),
cas.begin(), cas.end(), out0.begin());
cas.begin(), cas.end(),
out0.begin());
const auto out22 = std::set_union(ca0.begin(), ca0.end(),
cas.begin(), cas.end(),
out0.begin(), std::less<int>());
return true;
return out11 == (out0.begin() + 15) && out22 == out11;
}
static_assert(test());

View File

@ -29,10 +29,11 @@ test()
const auto out55 = std::unique_copy(ar3.begin(), ar3.end(), out0.begin());
const auto out66 = std::unique_copy(ar3.begin(), ar3.end(), out0.begin(),
const auto out66 = std::unique_copy(ar3.begin(), ar3.end(), out55,
std::equal_to<int>());
return true;
return out55 == (out0.begin() + 10) && out0[7] == 8
&& out66 == (out55 + 10) ; // && out0[19] == 11;
}
static_assert(test());

View File

@ -31,7 +31,7 @@ test()
const auto out88 = std::upper_bound(ca0.begin(), ca0.end(), 6,
std::less<int>());
return true;
return out77 == (ca0.begin() + 7) && out88 == out77;
}
static_assert(test());