зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1338389 - Tests for Variant's detail::Nth and detail::SelectVariantType - r=froydnj
MozReview-Commit-ID: 4QXdctmhNze --HG-- extra : rebase_source : ddbdf8c79f49ebb02c9e68dca0be4a6ee9ad11f4
This commit is contained in:
Родитель
a7c6eed190
Коммит
f5f8abf86a
|
@ -7,6 +7,7 @@
|
|||
#include "mozilla/UniquePtr.h"
|
||||
#include "mozilla/Variant.h"
|
||||
|
||||
using mozilla::IsSame;
|
||||
using mozilla::MakeUnique;
|
||||
using mozilla::UniquePtr;
|
||||
using mozilla::Variant;
|
||||
|
@ -20,6 +21,217 @@ struct Destroyer {
|
|||
|
||||
int Destroyer::destroyedCount = 0;
|
||||
|
||||
static void
|
||||
testDetails()
|
||||
{
|
||||
printf("testDetails\n");
|
||||
|
||||
using mozilla::detail::Nth;
|
||||
|
||||
// Test Nth with a list of 1 item.
|
||||
static_assert(IsSame<typename Nth<0, int>::Type, int>::value,
|
||||
"Nth<0, int>::Type should be int");
|
||||
|
||||
// Test Nth with a list of more than 1 item.
|
||||
static_assert(IsSame<typename Nth<0, int, char>::Type, int>::value,
|
||||
"Nth<0, int, char>::Type should be int");
|
||||
static_assert(IsSame<typename Nth<1, int, char>::Type, char>::value,
|
||||
"Nth<1, int, char>::Type should be char");
|
||||
|
||||
using mozilla::detail::SelectVariantType;
|
||||
|
||||
// SelectVariantType for zero items (shouldn't happen, but `count` should
|
||||
// still work ok.)
|
||||
static_assert(SelectVariantType<int, char>::count == 0,
|
||||
"SelectVariantType<int, char>::count should be 0");
|
||||
|
||||
// SelectVariantType for 1 type, for all combinations from/to T, const T,
|
||||
// const T&, T&&
|
||||
// - type to type
|
||||
static_assert(IsSame<typename SelectVariantType<int, int>::Type, int>::value,
|
||||
"SelectVariantType<int, int>::Type should be int");
|
||||
static_assert(SelectVariantType<int, int>::count == 1,
|
||||
"SelectVariantType<int, int>::count should be 1");
|
||||
|
||||
// - type to const type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, const int>::Type, const int>::value,
|
||||
"SelectVariantType<int, const int>::Type should be const int");
|
||||
static_assert(SelectVariantType<int, const int>::count == 1,
|
||||
"SelectVariantType<int, const int>::count should be 1");
|
||||
|
||||
// - type to const type&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, const int&>::Type,
|
||||
const int&>::value,
|
||||
"SelectVariantType<int, const int&>::Type should be const int&");
|
||||
static_assert(SelectVariantType<int, const int&>::count == 1,
|
||||
"SelectVariantType<int, const int&>::count should be 1");
|
||||
|
||||
// - type to type&&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, int&&>::Type, int&&>::value,
|
||||
"SelectVariantType<int, int&&>::Type should be int&&");
|
||||
static_assert(SelectVariantType<int, int&&>::count == 1,
|
||||
"SelectVariantType<int, int&&>::count should be 1");
|
||||
|
||||
// - const type to type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int, int>::Type, int>::value,
|
||||
"SelectVariantType<const int, int>::Type should be int");
|
||||
static_assert(SelectVariantType<const int, int>::count == 1,
|
||||
"SelectVariantType<const int, int>::count should be 1");
|
||||
|
||||
// - const type to const type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int, const int>::Type,
|
||||
const int>::value,
|
||||
"SelectVariantType<const int, const int>::Type should be const int");
|
||||
static_assert(SelectVariantType<const int, const int>::count == 1,
|
||||
"SelectVariantType<const int, const int>::count should be 1");
|
||||
|
||||
// - const type to const type&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int, const int&>::Type,
|
||||
const int&>::value,
|
||||
"SelectVariantType<const int, const int&>::Type should be const int&");
|
||||
static_assert(SelectVariantType<const int, const int&>::count == 1,
|
||||
"SelectVariantType<const int, const int&>::count should be 1");
|
||||
|
||||
// - const type to type&&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int, int&&>::Type, int&&>::value,
|
||||
"SelectVariantType<const int, int&&>::Type should be int&&");
|
||||
static_assert(SelectVariantType<const int, int&&>::count == 1,
|
||||
"SelectVariantType<const int, int&&>::count should be 1");
|
||||
|
||||
// - const type& to type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int&, int>::Type, int>::value,
|
||||
"SelectVariantType<const int&, int>::Type should be int");
|
||||
static_assert(SelectVariantType<const int&, int>::count == 1,
|
||||
"SelectVariantType<const int&, int>::count should be 1");
|
||||
|
||||
// - const type& to const type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int&, const int>::Type,
|
||||
const int>::value,
|
||||
"SelectVariantType<const int&, const int>::Type should be const int");
|
||||
static_assert(SelectVariantType<const int&, const int>::count == 1,
|
||||
"SelectVariantType<const int&, const int>::count should be 1");
|
||||
|
||||
// - const type& to const type&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int&, const int&>::Type,
|
||||
const int&>::value,
|
||||
"SelectVariantType<const int&, const int&>::Type should be const int&");
|
||||
static_assert(SelectVariantType<const int&, const int&>::count == 1,
|
||||
"SelectVariantType<const int&, const int&>::count should be 1");
|
||||
|
||||
// - const type& to type&&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<const int&, int&&>::Type, int&&>::value,
|
||||
"SelectVariantType<const int&, int&&>::Type should be int&&");
|
||||
static_assert(SelectVariantType<const int&, int&&>::count == 1,
|
||||
"SelectVariantType<const int&, int&&>::count should be 1");
|
||||
|
||||
// - type&& to type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int&&, int>::Type, int>::value,
|
||||
"SelectVariantType<int&&, int>::Type should be int");
|
||||
static_assert(SelectVariantType<int&&, int>::count == 1,
|
||||
"SelectVariantType<int&&, int>::count should be 1");
|
||||
|
||||
// - type&& to const type
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int&&, const int>::Type,
|
||||
const int>::value,
|
||||
"SelectVariantType<int&&, const int>::Type should be const int");
|
||||
static_assert(SelectVariantType<int&&, const int>::count == 1,
|
||||
"SelectVariantType<int&&, const int>::count should be 1");
|
||||
|
||||
// - type&& to const type&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int&&, const int&>::Type,
|
||||
const int&>::value,
|
||||
"SelectVariantType<int&&, const int&>::Type should be const int&");
|
||||
static_assert(SelectVariantType<int&&, const int&>::count == 1,
|
||||
"SelectVariantType<int&&, const int&>::count should be 1");
|
||||
|
||||
// - type&& to type&&
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int&&, int&&>::Type, int&&>::value,
|
||||
"SelectVariantType<int&&, int&&>::Type should be int&&");
|
||||
static_assert(SelectVariantType<int&&, int&&>::count == 1,
|
||||
"SelectVariantType<int&&, int&&>::count should be 1");
|
||||
|
||||
// SelectVariantType for two different types.
|
||||
// (Don't test all combinations, trust that the above tests are sufficient.)
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, int, char>::Type, int>::value,
|
||||
"SelectVariantType<int, int, char>::Type should be int");
|
||||
static_assert(SelectVariantType<int, int, char>::count == 1,
|
||||
"SelectVariantType<int, int, char>::count should be 1");
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<char, int, char>::Type, char>::value,
|
||||
"SelectVariantType<char, int, char>::Type should be char");
|
||||
static_assert(SelectVariantType<char, int, char>::count == 1,
|
||||
"SelectVariantType<char, int, char>::count should be 1");
|
||||
|
||||
// SelectVariantType for two identical types.
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, int, int>::Type, int>::value,
|
||||
"SelectVariantType<int, int, int>::Type should be int");
|
||||
static_assert(SelectVariantType<int, int, int>::count == 2,
|
||||
"SelectVariantType<int, int, int>::count should be 2");
|
||||
|
||||
// SelectVariantType for two identical types, with others around.
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, char, int, int>::Type, int>::value,
|
||||
"SelectVariantType<int, char, int, int>::Type should be int");
|
||||
static_assert(SelectVariantType<int, char, int, int>::count == 2,
|
||||
"SelectVariantType<int, char, int, int>::count should be 2");
|
||||
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, int, char, int>::Type, int>::value,
|
||||
"SelectVariantType<int, int, char, int>::Type should be int");
|
||||
static_assert(SelectVariantType<int, int, char, int>::count == 2,
|
||||
"SelectVariantType<int, int, char, int>::count should be 2");
|
||||
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, int, int, char>::Type, int>::value,
|
||||
"SelectVariantType<int, int, int, char>::Type should be int");
|
||||
static_assert(SelectVariantType<int, int, int, char>::count == 2,
|
||||
"SelectVariantType<int, int, int, char>::count should be 2");
|
||||
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, char, int, char, int, char>::Type,
|
||||
int>::value,
|
||||
"SelectVariantType<int, char, int, char, int, char>::Type should be int");
|
||||
static_assert(
|
||||
SelectVariantType<int, char, int, char, int, char>::count == 2,
|
||||
"SelectVariantType<int, char, int, char, int, char>::count should be 2");
|
||||
|
||||
// SelectVariantType for two identically-selectable types (first one wins!).
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, int, const int>::Type, int>::value,
|
||||
"SelectVariantType<int, int, const int>::Type should be int");
|
||||
static_assert(SelectVariantType<int, int, const int>::count == 2,
|
||||
"SelectVariantType<int, int, const int>::count should be 2");
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, const int, int>::Type,
|
||||
const int>::value,
|
||||
"SelectVariantType<int, const int, int>::Type should be const int");
|
||||
static_assert(SelectVariantType<int, const int, int>::count == 2,
|
||||
"SelectVariantType<int, const int, int>::count should be 2");
|
||||
static_assert(
|
||||
IsSame<typename SelectVariantType<int, const int, int&&>::Type,
|
||||
const int>::value,
|
||||
"SelectVariantType<int, const int, int&&>::Type should be const int");
|
||||
static_assert(SelectVariantType<int, const int, int&&>::count == 2,
|
||||
"SelectVariantType<int, const int, int&&>::count should be 2");
|
||||
}
|
||||
|
||||
static void
|
||||
testSimple()
|
||||
{
|
||||
|
@ -31,7 +243,7 @@ testSimple()
|
|||
|
||||
MOZ_RELEASE_ASSERT(v.is<1>());
|
||||
MOZ_RELEASE_ASSERT(!v.is<0>());
|
||||
static_assert(mozilla::IsSame<decltype(v.as<1>()), uint64_t&>::value,
|
||||
static_assert(IsSame<decltype(v.as<1>()), uint64_t&>::value,
|
||||
"as<1>() should return a uint64_t");
|
||||
MOZ_RELEASE_ASSERT(v.as<1>() == 1);
|
||||
}
|
||||
|
@ -48,11 +260,11 @@ testDuplicate()
|
|||
MOZ_RELEASE_ASSERT(v.is<1>());
|
||||
MOZ_RELEASE_ASSERT(!v.is<0>());
|
||||
MOZ_RELEASE_ASSERT(!v.is<2>());
|
||||
static_assert(mozilla::IsSame<decltype(v.as<0>()), uint32_t&>::value,
|
||||
static_assert(IsSame<decltype(v.as<0>()), uint32_t&>::value,
|
||||
"as<0>() should return a uint64_t");
|
||||
static_assert(mozilla::IsSame<decltype(v.as<1>()), uint64_t&>::value,
|
||||
static_assert(IsSame<decltype(v.as<1>()), uint64_t&>::value,
|
||||
"as<1>() should return a uint64_t");
|
||||
static_assert(mozilla::IsSame<decltype(v.as<2>()), uint32_t&>::value,
|
||||
static_assert(IsSame<decltype(v.as<2>()), uint32_t&>::value,
|
||||
"as<2>() should return a uint64_t");
|
||||
MOZ_RELEASE_ASSERT(v.as<1>() == 1);
|
||||
MOZ_RELEASE_ASSERT(v.extract<1>() == 1);
|
||||
|
@ -226,6 +438,7 @@ testRvalueMatcher()
|
|||
int
|
||||
main()
|
||||
{
|
||||
testDetails();
|
||||
testSimple();
|
||||
testDuplicate();
|
||||
testConstructionWithVariantType();
|
||||
|
|
Загрузка…
Ссылка в новой задаче