// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include #include #include #include #include #include namespace document { class GlobalIdTest : public ::testing::Test { protected: void verifyGlobalIdRange(const std::vector& ids, uint32_t countBits); }; TEST_F(GlobalIdTest, testNormalUsage) { const char* emptystring = "\0\0\0\0\0\0\0\0\0\0\0\0"; const char* teststring = "1234567890ABCDEF"; EXPECT_TRUE(strlen(teststring) > GlobalId::LENGTH); { // Test empty global id GlobalId id; for (uint32_t i=0; i& ids, uint32_t countBits) { BucketIdFactory factory; for (uint32_t i=0, n=ids.size(); i last.convertToBucketId().toKey())) { std::ostringstream msg; msg << gid << " should be in the range " << first << " - " << last; msg << ", as bucket " << gid.convertToBucketId() << " should be in the range " << first.convertToBucketId() << " - " << last.convertToBucketId() << "\n"; msg << ", reverted " << std::hex << gid.convertToBucketId().toKey() << " should be in the range " << first.convertToBucketId().toKey() << " - " << last.convertToBucketId().toKey() << "\n"; EXPECT_TRUE(gid.convertToBucketId().toKey() >= first.convertToBucketId().toKey()) << msg.str(); EXPECT_TRUE(gid.convertToBucketId().toKey() <= last.convertToBucketId().toKey()) << msg.str(); } } else { if ((gidKey >= first.convertToBucketId().toKey()) && (gidKey <= last.convertToBucketId().toKey())) { std::ostringstream msg; msg << gid << " should not be in the range " << first << " - " << last; EXPECT_TRUE((gid.convertToBucketId().toKey() < first.convertToBucketId().toKey()) || (gid.convertToBucketId().toKey() > last.convertToBucketId().toKey())) << msg.str(); } } } } } TEST_F(GlobalIdTest, testGidRangeConversion) { // Generate a lot of random document ids used for test std::vector docIds; vespalib::RandomGen randomizer(0xdeadbabe); for (uint32_t j=0; j<100; ++j) { vespalib::asciistream name_space; vespalib::asciistream ost; for (uint32_t i=0, n=randomizer.nextUint32(1, 5); i; GidMap gidMap; gidMap[foo] = 666; gidMap[bar] = 777; gidMap[baz] = 888; GidMap::iterator it = gidMap.begin(); EXPECT_TRUE(it->first == bar); EXPECT_TRUE(it->second == 777); ++it; EXPECT_TRUE(it->first == baz); EXPECT_TRUE(it->second == 888); ++it; EXPECT_TRUE(it->first == foo); EXPECT_TRUE(it->second == 666); } } }