aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/docstore/lid_info/lid_info_test.cpp
blob: 045f4a474df9f29eff57c812a4624082873514a6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/searchlib/docstore/lid_info.h>

#include <vespa/log/log.h>
LOG_SETUP("lid_info_test");

using namespace search;

TEST("require that LidInfo orders file chunk size")
{
    EXPECT_TRUE(LidInfo(1, 1, 1) == LidInfo(1, 1, 1));
    EXPECT_FALSE(LidInfo(1, 1, 1) < LidInfo(1, 1, 1));

    EXPECT_FALSE(LidInfo(1, 1, 1) == LidInfo(2, 1, 1));
    EXPECT_TRUE(LidInfo(1, 1, 1) < LidInfo(2, 1, 1));
    EXPECT_TRUE(LidInfo(1, 2, 1) < LidInfo(2, 1, 1));
    EXPECT_TRUE(LidInfo(1, 1, 2) < LidInfo(2, 1, 1));
}

TEST("require that LidInfo has 8 bytes size and that it can represent the numbers correctly")
{
    EXPECT_EQUAL(8u, sizeof(LidInfo));
    LidInfo a(0,0,0);
    EXPECT_EQUAL(0u, a.getFileId());
    EXPECT_EQUAL(0u, a.getChunkId());
    EXPECT_EQUAL(0u, a.size());
    EXPECT_TRUE(a.valid());
    EXPECT_TRUE(a.empty());
    a = LidInfo(1,1,1);
    EXPECT_EQUAL(1u, a.getFileId());
    EXPECT_EQUAL(1u, a.getChunkId());
    EXPECT_EQUAL(64u, a.size());
    EXPECT_TRUE(a.valid());
    EXPECT_FALSE(a.empty());
    a = LidInfo(1,1,63);
    EXPECT_EQUAL(1u, a.getFileId());
    EXPECT_EQUAL(1u, a.getChunkId());
    EXPECT_EQUAL(64u, a.size());
    EXPECT_TRUE(a.valid());
    EXPECT_FALSE(a.empty());
    a = LidInfo(1,1,64);
    EXPECT_EQUAL(1u, a.getFileId());
    EXPECT_EQUAL(1u, a.getChunkId());
    EXPECT_EQUAL(64u, a.size());
    EXPECT_TRUE(a.valid());
    EXPECT_FALSE(a.empty());
    a = LidInfo(1,1,65);
    EXPECT_EQUAL(1u, a.getFileId());
    EXPECT_EQUAL(1u, a.getChunkId());
    EXPECT_EQUAL(128u, a.size());
    EXPECT_TRUE(a.valid());
    EXPECT_FALSE(a.empty());
    a = LidInfo(0xffff,0x3fffff,0xffffff80u);
    EXPECT_EQUAL(0xffffu, a.getFileId());
    EXPECT_EQUAL(0x3fffffu, a.getChunkId());
    EXPECT_EQUAL(0xffffff80u, a.size());
    EXPECT_TRUE(a.valid());
    EXPECT_FALSE(a.empty());
    EXPECT_EXCEPTION(a = LidInfo(0x10000,0x3fffff,1), std::runtime_error,
                     "LidInfo(fileId=65536, chunkId=4194303, size=1) has invalid fileId larger than 65535");
    EXPECT_EXCEPTION(a = LidInfo(0xffff,0x400000,1), std::runtime_error,
                     "LidInfo(fileId=65535, chunkId=4194304, size=1) has invalid chunkId larger than 4194303");
    EXPECT_EXCEPTION(a = LidInfo(0xffff,0x3fffff,0xffffff81u), std::runtime_error,
                     "LidInfo(fileId=65535, chunkId=4194303, size=4294967169) has too large size larger than 4294967168");
}

TEST_MAIN() { TEST_RUN_ALL(); }