X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Ftest%2FMapUtilTest.cpp;h=32ffdba460e8f1bd907f3733bcf801d8e33712f1;hb=bba519bfb1b4c4d24fd210696e31fcf5e25d13e8;hp=33ffe0661adf0eb3844e497db2d0bf49db56921a;hpb=136c9fba2f6b520946edb2556e1acb14d59ac660;p=folly.git diff --git a/folly/test/MapUtilTest.cpp b/folly/test/MapUtilTest.cpp index 33ffe066..32ffdba4 100644 --- a/folly/test/MapUtilTest.cpp +++ b/folly/test/MapUtilTest.cpp @@ -141,6 +141,19 @@ TEST(MapUtil, get_ptr_path_mixed) { } namespace { +template +struct element_type { + using type = typename std::decay::type; +}; + +template +struct element_type { + using type = T; +}; + +template +using element_type_t = typename element_type::type; + template struct Compiles : std::false_type {}; @@ -148,7 +161,7 @@ template struct Compiles< T, void_t::type>>(), + std::declval>>(), std::declval(), std::declval()))>> : std::true_type {}; } @@ -158,4 +171,78 @@ TEST(MapUtil, get_default_temporary) { EXPECT_TRUE(Compiles::value); EXPECT_FALSE(Compiles::value); EXPECT_FALSE(Compiles::value); + + EXPECT_TRUE(Compiles::value); + EXPECT_TRUE(Compiles::value); + EXPECT_FALSE(Compiles::value); +} + +TEST(MapUtil, get_default_path) { + using std::map; + map> m; + m[4][2] = 42; + EXPECT_EQ(42, get_default(m, 4, 2, 42)); + EXPECT_EQ(42, get_default(m, 1, 3, 42)); +} + +TEST(MapUtil, get_default_path_mixed) { + using std::map; + using std::unordered_map; + using std::string; + map> m; + int key1 = 42; + const string key2 = "hello"; + constexpr StringPiece value = "world"; + constexpr StringPiece dflt = "default"; + m[key1][key2] = value; + EXPECT_EQ(value, get_default(m, 42, key2, dflt)); + EXPECT_EQ(value, get_default(m, key1, "hello", dflt)); + EXPECT_EQ(dflt, get_default(m, 0, key2, dflt)); + EXPECT_EQ(dflt, get_default(m, key1, "bad", "default")); +} + +TEST(MapUtil, get_ref_default_path) { + using std::map; + map> m; + m[4][2] = 42; + const int dflt = 13; + EXPECT_EQ(42, get_ref_default(m, 4, 2, dflt)); + EXPECT_EQ(dflt, get_ref_default(m, 1, 3, dflt)); +} + +TEST(MapUtil, get_ref_default_path_mixed) { + using std::map; + using std::unordered_map; + using std::string; + map> m; + int key1 = 42; + const string key2 = "hello"; + constexpr StringPiece value = "world"; + constexpr StringPiece dflt = "default"; + m[key1][key2] = value; + EXPECT_EQ(value, get_ref_default(m, 42, key2, dflt)); + EXPECT_EQ(value, get_ref_default(m, key1, "hello", dflt)); + EXPECT_EQ(dflt, get_ref_default(m, 0, key2, dflt)); + EXPECT_EQ(dflt, get_ref_default(m, key1, "bad", dflt)); +} + +namespace { +template +struct GetRefDefaultPathCompiles : std::false_type {}; + +template +struct GetRefDefaultPathCompiles< + T, + void_t>>>(), + std::declval(), + std::declval(), + std::declval()))>> : std::true_type {}; +} + +TEST(MapUtil, get_ref_default_path_temporary) { + EXPECT_TRUE(GetRefDefaultPathCompiles::value); + EXPECT_TRUE(GetRefDefaultPathCompiles::value); + EXPECT_FALSE(GetRefDefaultPathCompiles::value); + EXPECT_FALSE(GetRefDefaultPathCompiles::value); }