diff options
Diffstat (limited to 'searchlib/src/tests/stringenum/stringenum_test.cpp')
-rw-r--r-- | searchlib/src/tests/stringenum/stringenum_test.cpp | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/searchlib/src/tests/stringenum/stringenum_test.cpp b/searchlib/src/tests/stringenum/stringenum_test.cpp new file mode 100644 index 00000000000..8c6ef64dbe3 --- /dev/null +++ b/searchlib/src/tests/stringenum/stringenum_test.cpp @@ -0,0 +1,147 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright (C) 2001-2003 Fast Search & Transfer ASA +// Copyright (C) 2003 Overture Services Norway AS + + +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("stringenum"); +#include <vespa/fastlib/io/bufferedfile.h> +#include <vespa/searchlib/util/stringenum.h> + + +#include <vespa/vespalib/testkit/testapp.h> + +using namespace vespalib; + +class MyApp : public vespalib::TestApp +{ +public: + void CheckLookup( search::util::StringEnum *strEnum, const char *str, int value); + int Main(); + + MyApp(void) {} +}; + + +void +MyApp::CheckLookup( search::util::StringEnum *strEnum, const char *str, int value) +{ + EXPECT_EQUAL(0, strcmp(str, strEnum->Lookup(value))); + EXPECT_EQUAL(value, strEnum->Lookup(str)); +} + + +int +MyApp::Main() +{ + TEST_INIT("stringenum_test"); + + search::util::StringEnum enum1; + search::util::StringEnum enum2; + + // check number of entries + EXPECT_EQUAL(enum1.GetNumEntries(), 0u); + EXPECT_EQUAL(enum2.GetNumEntries(), 0u); + + // check add non-duplicates + EXPECT_EQUAL(enum1.Add("zero"), 0); + EXPECT_EQUAL(enum1.Add("one"), 1); + EXPECT_EQUAL(enum1.Add("two"), 2); + EXPECT_EQUAL(enum1.Add("three"), 3); + EXPECT_EQUAL(enum1.Add("four"), 4); + EXPECT_EQUAL(enum1.Add("five"), 5); + EXPECT_EQUAL(enum1.Add("six"), 6); + EXPECT_EQUAL(enum1.Add("seven"), 7); + EXPECT_EQUAL(enum1.Add("eight"), 8); + EXPECT_EQUAL(enum1.Add("nine"), 9); + + // check add duplicates + EXPECT_EQUAL(enum1.Add("four"), 4); + EXPECT_EQUAL(enum1.Add("eight"), 8); + EXPECT_EQUAL(enum1.Add("six"), 6); + EXPECT_EQUAL(enum1.Add("seven"), 7); + EXPECT_EQUAL(enum1.Add("one"), 1); + EXPECT_EQUAL(enum1.Add("nine"), 9); + EXPECT_EQUAL(enum1.Add("five"), 5); + EXPECT_EQUAL(enum1.Add("zero"), 0); + EXPECT_EQUAL(enum1.Add("two"), 2); + EXPECT_EQUAL(enum1.Add("three"), 3); + + // check add non-duplicate + EXPECT_EQUAL(enum1.Add("ten"), 10); + + // check mapping and reverse mapping + EXPECT_EQUAL(enum1.GetNumEntries(), 11u); + TEST_DO(CheckLookup(&enum1, "zero", 0)); + TEST_DO(CheckLookup(&enum1, "one", 1)); + TEST_DO(CheckLookup(&enum1, "two", 2)); + TEST_DO(CheckLookup(&enum1, "three", 3)); + TEST_DO(CheckLookup(&enum1, "four", 4)); + TEST_DO(CheckLookup(&enum1, "five", 5)); + TEST_DO(CheckLookup(&enum1, "six", 6)); + TEST_DO(CheckLookup(&enum1, "seven", 7)); + TEST_DO(CheckLookup(&enum1, "eight", 8)); + TEST_DO(CheckLookup(&enum1, "nine", 9)); + TEST_DO(CheckLookup(&enum1, "ten", 10)); + + TEST_FLUSH(); + + // save/load + EXPECT_TRUE(enum1.Save("tmp.enum")); + EXPECT_TRUE(enum2.Load("tmp.enum")); + + // check mapping and reverse mapping + EXPECT_EQUAL(enum2.GetNumEntries(), 11u); + TEST_DO(CheckLookup(&enum2, "zero", 0)); + TEST_DO(CheckLookup(&enum2, "one", 1)); + TEST_DO(CheckLookup(&enum2, "two", 2)); + TEST_DO(CheckLookup(&enum2, "three", 3)); + TEST_DO(CheckLookup(&enum2, "four", 4)); + TEST_DO(CheckLookup(&enum2, "five", 5)); + TEST_DO(CheckLookup(&enum2, "six", 6)); + TEST_DO(CheckLookup(&enum2, "seven", 7)); + TEST_DO(CheckLookup(&enum2, "eight", 8)); + TEST_DO(CheckLookup(&enum2, "nine", 9)); + TEST_DO(CheckLookup(&enum2, "ten", 10)); + + // add garbage + enum2.Add("sfsdffgdfh"); + enum2.Add("sf24dfsgg3"); + enum2.Add("sfwertfgdh"); + enum2.Add("sfewrgtsfh"); + enum2.Add("sfgdsdgdfh"); + + TEST_FLUSH(); + + // reload + EXPECT_TRUE(enum2.Load("tmp.enum")); + + // check garbage lost + EXPECT_EQUAL(enum2.GetNumEntries(), 11u); + EXPECT_EQUAL(-1, enum2.Lookup("sfewrgtsfh")); + // check mapping and reverse mapping + TEST_DO(CheckLookup(&enum2, "zero", 0)); + TEST_DO(CheckLookup(&enum2, "one", 1)); + TEST_DO(CheckLookup(&enum2, "two", 2)); + TEST_DO(CheckLookup(&enum2, "three", 3)); + TEST_DO(CheckLookup(&enum2, "four", 4)); + TEST_DO(CheckLookup(&enum2, "five", 5)); + TEST_DO(CheckLookup(&enum2, "six", 6)); + TEST_DO(CheckLookup(&enum2, "seven", 7)); + TEST_DO(CheckLookup(&enum2, "eight", 8)); + TEST_DO(CheckLookup(&enum2, "nine", 9)); + TEST_DO(CheckLookup(&enum2, "ten", 10)); + + // clear + enum1.Clear(); + enum2.Clear(); + + // check number of entries + EXPECT_EQUAL(enum1.GetNumEntries(), 0u); + EXPECT_EQUAL(enum2.GetNumEntries(), 0u); + + TEST_DONE(); +} + +TEST_APPHOOK(MyApp); |