blob: c0d6e39917a610af9dcfc6274ff6551e7e7e4939 [file] [log] [blame]
// Copyright 2015 The Shaderc Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "libshaderc_util/format.h"
#include <gmock/gmock.h>
#include <map>
#include <string>
#include <unordered_map>
namespace {
using testing::AllOf;
using testing::HasSubstr;
using testing::IsEmpty;
class FormatMap : public testing::Test {
public:
FormatMap()
: map1({{"one", 1}}),
umap1({map1.begin(), map1.end()}),
map8({{1, "one"},
{2, "two"},
{3, "three"},
{4, "four"},
{5, "five"},
{6, "six"},
{7, "seven"},
{8, "eight"}}),
umap8({map8.begin(), map8.end()}),
mmap({{1, 100}, {1, 200}, {2, 100}, {2, 200}}),
ummap({mmap.begin(), mmap.end()}) {}
protected:
std::map<int, int> empty_map;
std::unordered_map<int, int> empty_umap;
std::map<std::string, int> map1;
std::unordered_map<std::string, int> umap1;
std::map<int, std::string> map8;
std::unordered_map<int, std::string> umap8;
std::multimap<int, int> mmap;
std::unordered_multimap<int, int> ummap;
};
TEST_F(FormatMap, EmptyMap) {
EXPECT_THAT(shaderc_util::format(empty_map, "pre", "in", "post"), IsEmpty());
EXPECT_THAT(shaderc_util::format(empty_umap, "pre", "in", "post"), IsEmpty());
}
TEST_F(FormatMap, SingleEntry) {
EXPECT_EQ("PREoneIN1POST", shaderc_util::format(map1, "PRE", "IN", "POST"));
EXPECT_EQ("PREoneIN1POST", shaderc_util::format(umap1, "PRE", "IN", "POST"));
}
TEST_F(FormatMap, EmptyPrefix) {
EXPECT_EQ("oneIN1POST", shaderc_util::format(map1, "", "IN", "POST"));
EXPECT_EQ("oneIN1POST", shaderc_util::format(umap1, "", "IN", "POST"));
}
TEST_F(FormatMap, EmptyInfix) {
EXPECT_EQ("PREone1POST", shaderc_util::format(map1, "PRE", "", "POST"));
EXPECT_EQ("PREone1POST", shaderc_util::format(umap1, "PRE", "", "POST"));
}
TEST_F(FormatMap, EmptyPostfix) {
EXPECT_EQ("PREoneIN1", shaderc_util::format(map1, "PRE", "IN", ""));
EXPECT_EQ("PREoneIN1", shaderc_util::format(umap1, "PRE", "IN", ""));
}
TEST_F(FormatMap, LargerMap) {
const std::string result = shaderc_util::format(map8, "", "", "\n"),
uresult = shaderc_util::format(umap8, "", "", "\n");
auto has_all =
AllOf(HasSubstr("1one\n"), HasSubstr("2two\n"), HasSubstr("3three\n"),
HasSubstr("4four\n"), HasSubstr("5five\n"), HasSubstr("6six\n"),
HasSubstr("7seven\n"), HasSubstr("8eight\n"));
EXPECT_THAT(result, has_all);
EXPECT_EQ(48u, result.size());
EXPECT_THAT(uresult, has_all);
EXPECT_EQ(48u, uresult.size());
}
TEST_F(FormatMap, Multimap) {
const std::string result = shaderc_util::format(mmap, " ", "&", ""),
uresult = shaderc_util::format(ummap, " ", "&", "");
auto has_all = AllOf(HasSubstr(" 1&100"), HasSubstr(" 1&200"),
HasSubstr(" 2&100"), HasSubstr(" 2&200"));
EXPECT_THAT(result, has_all);
EXPECT_EQ(4 * 6u, result.size());
EXPECT_THAT(uresult, has_all);
EXPECT_EQ(4 * 6u, uresult.size());
}
} // anonymous namespace