Допустим, у меня есть следующее:
unordered_map<string, int> map{{"foo", 1}, {"bar", 2}, {"baz", 3}};
vector<string> expected_keys{"foo", "bar", "kaz"}; // Note "kaz" not "baz"
И я хочу проверить, все ли ключи из map
содержатся в наборе expected_keys
.
Что яочень хочу написать вот что:
EXPECT_THAT(map, Each(Key(From(expected_keys))));
Однако, насколько я могу судить, ничто не поддерживает шаблон From
;то есть, проверка того, что значение из набора значений.Библиотека matcher, кажется, предполагает, что вы всегда будете делать set contains value
, а не value is in set
.В любом случае, кроме этого, они эквивалентны.И, если бы unordered_map
имел keys()
API, вы могли бы вписать его в шаблон, используя простой UnorderedElementsAreArray(expected_keys)
.Но это не так.
Самое близкое, что я мог придумать, было:
EXPECT_THAT(map, Each(Key(ResultOf([&](const key&){return Value(expected_keys, Contains(key));}, IsTrue())))
Что ... просто ужасно.Pointwise()
действительно близко, но упорядоченность поиска делает его неправильным для неупорядоченного контейнера.
Есть ли способ выполнить этот тип запроса напрямую, не прибегая к ResultOf()
и Value()
?Или я думаю о проблеме не так?