Skip to content

Commit

Permalink
Fix is_assignable test coverage (#3898)
Browse files Browse the repository at this point in the history
  • Loading branch information
StephanTLavavej authored Jul 26, 2023
1 parent 64a60b4 commit cd05c72
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,19 @@ void assert_P0608R3() {
static_assert(!is_constructible_v<variant<float, vector<int>>, int>);
static_assert(!is_constructible_v<variant<float, char>, int>);

static_assert(is_assignable_v<variant<string, bool>, const char*>);
static_assert(is_assignable_v<variant<string, bool>, string>);
static_assert(is_assignable_v<variant<char, optional<char16_t>>, char16_t>);
static_assert(is_assignable_v<variant<int, reference_wrapper<double>>, double&>);
static_assert(is_assignable_v<variant<float, int>, char>);
static_assert(is_assignable_v<variant<float, long>, int>);
static_assert(is_assignable_v<variant<float, long long>, int>);
static_assert(is_assignable_v<variant<float, long, double>, int>);
static_assert(is_assignable_v<variant<float, vector<int>, long long>, int>);
static_assert(is_assignable_v<variant<float, int, long long>, char>);
static_assert(!is_assignable_v<variant<float>, int>);
static_assert(!is_assignable_v<variant<float, vector<int>>, int>);
static_assert(!is_assignable_v<variant<float, char>, int>);
static_assert(is_assignable_v<variant<string, bool>&, const char*>);
static_assert(is_assignable_v<variant<string, bool>&, string>);
static_assert(is_assignable_v<variant<char, optional<char16_t>>&, char16_t>);
static_assert(is_assignable_v<variant<int, reference_wrapper<double>>&, double&>);
static_assert(is_assignable_v<variant<float, int>&, char>);
static_assert(is_assignable_v<variant<float, long>&, int>);
static_assert(is_assignable_v<variant<float, long long>&, int>);
static_assert(is_assignable_v<variant<float, long, double>&, int>);
static_assert(is_assignable_v<variant<float, vector<int>, long long>&, int>);
static_assert(is_assignable_v<variant<float, int, long long>&, char>);
static_assert(!is_assignable_v<variant<float>&, int>);
static_assert(!is_assignable_v<variant<float, vector<int>>&, int>);
static_assert(!is_assignable_v<variant<float, char>&, int>);
}

void assert_P1957R2() {
Expand All @@ -67,9 +67,9 @@ void assert_P1957R2() {
static_assert(is_constructible_v<variant<bool, int>, bitset<4>::reference>);
static_assert(is_constructible_v<variant<bool>, bitset<4>::reference>);

static_assert(is_assignable_v<variant<bool, int>, bool>);
static_assert(is_assignable_v<variant<bool, int>, bitset<4>::reference>);
static_assert(is_assignable_v<variant<bool>, bitset<4>::reference>);
static_assert(is_assignable_v<variant<bool, int>&, bool>);
static_assert(is_assignable_v<variant<bool, int>&, bitset<4>::reference>);
static_assert(is_assignable_v<variant<bool>&, bitset<4>::reference>);
}

void assert_more_examples() {
Expand All @@ -89,20 +89,20 @@ void assert_more_examples() {
static_assert(!is_constructible_v<variant<char, default_struct>, int>);
static_assert(!is_constructible_v<variant<float, long, long long>, int>);

static_assert(is_assignable_v<variant<double_double>, double>);
static_assert(is_assignable_v<variant<vector<vector<int>>, optional<int>, int>, int>);
static_assert(is_assignable_v<variant<vector<vector<int>>, optional<int>>, int>);
static_assert(is_assignable_v<variant<vector<int>, optional<int>, float>, int>);
static_assert(is_assignable_v<variant<bool>, convertible_bool>);
static_assert(is_assignable_v<variant<bool, int>, convertible_bool>);
static_assert(is_assignable_v<variant<convertible_bool>, bool>);
static_assert(is_assignable_v<variant<float, bool, convertible_bool>, convertible_bool>);
static_assert(is_assignable_v<variant<float, bool, convertible_bool>, bool>);
static_assert(is_assignable_v<variant<char, int>, bool>);
static_assert(is_assignable_v<variant<double_double>, int>);
static_assert(!is_assignable_v<variant<float>, unsigned int>);
static_assert(!is_assignable_v<variant<char, default_struct>, int>);
static_assert(!is_assignable_v<variant<float, long, long long>, int>);
static_assert(is_assignable_v<variant<double_double>&, double>);
static_assert(is_assignable_v<variant<vector<vector<int>>, optional<int>, int>&, int>);
static_assert(is_assignable_v<variant<vector<vector<int>>, optional<int>>&, int>);
static_assert(is_assignable_v<variant<vector<int>, optional<int>, float>&, int>);
static_assert(is_assignable_v<variant<bool>&, convertible_bool>);
static_assert(is_assignable_v<variant<bool, int>&, convertible_bool>);
static_assert(is_assignable_v<variant<convertible_bool>&, bool>);
static_assert(is_assignable_v<variant<float, bool, convertible_bool>&, convertible_bool>);
static_assert(is_assignable_v<variant<float, bool, convertible_bool>&, bool>);
static_assert(is_assignable_v<variant<char, int>&, bool>);
static_assert(is_assignable_v<variant<double_double>&, int>);
static_assert(!is_assignable_v<variant<float>&, unsigned int>);
static_assert(!is_assignable_v<variant<char, default_struct>&, int>);
static_assert(!is_assignable_v<variant<float, long, long long>&, int>);
}

void test_variant_constructor_P0608R3() {
Expand Down
12 changes: 6 additions & 6 deletions tests/std/tests/P0718R2_atomic_smart_ptrs/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -634,12 +634,12 @@ int main() {
ensure_member_calls_compile<atomic<shared_ptr<int[2][2]>>>();
ensure_member_calls_compile<atomic<weak_ptr<int[2][2]>>>();

// LWG-3893: LWG 3661 broke atomic<shared_ptr<T>> a; a = nullptr;
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<bool>>, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int>>, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[]>>, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[][2]>>, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[2][2]>>, nullptr_t>);
// LWG-3893: LWG-3661 broke atomic<shared_ptr<T>> a; a = nullptr;
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<bool>>&, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int>>&, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[]>>&, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[][2]>>&, nullptr_t>);
static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[2][2]>>&, nullptr_t>);

#ifdef _DEBUG
sptr0 = {};
Expand Down
1 change: 1 addition & 0 deletions tests/std/tests/P2321R2_proxy_reference/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ constexpr bool test() {

{ // Test vector<bool>::reference
static_assert(is_assignable_v<const vector<bool>::reference, bool>);
static_assert(is_assignable_v<const vector<bool>::reference&, bool>);

vector<bool> vb{false};
const vector<bool>::reference r = vb[0];
Expand Down

0 comments on commit cd05c72

Please sign in to comment.