| | |
| |
|
| | #include "App/MappedName.h" |
| | #include <gtest/gtest.h> |
| |
|
| | #include <App/StringHasher.h> |
| | #include <App/StringHasherPy.h> |
| | #include <App/StringIDPy.h> |
| |
|
| | #include <QCryptographicHash> |
| | #include <array> |
| |
|
| | class StringIDTest: public ::testing::Test |
| | { |
| | protected: |
| | |
| | |
| |
|
| | static App::StringID givenFlaggedStringID(App::StringID::Flag flag) |
| | { |
| | const long value {42}; |
| | const QByteArray data {"data", 4}; |
| | return App::StringID {value, data, flag}; |
| | } |
| | }; |
| |
|
| | TEST_F(StringIDTest, stringIDManualConstructionNoFlags) |
| | { |
| | |
| | const long expectedValue {42}; |
| | const QByteArray expectedData {"data", 4}; |
| |
|
| | |
| | auto id = App::StringID(expectedValue, expectedData); |
| |
|
| | |
| | EXPECT_EQ(expectedValue, id.value()); |
| | EXPECT_EQ(expectedData, id.data()); |
| | EXPECT_FALSE(id.isBinary()); |
| | } |
| |
|
| | TEST_F(StringIDTest, stringIDManualConstructionWithFlag) |
| | { |
| | |
| | const long expectedValue {42}; |
| | const QByteArray expectedData {"data", 4}; |
| | const App::StringID::Flags expectedFlags {App::StringID::Flag::Binary}; |
| |
|
| | |
| | auto id = App::StringID(expectedValue, expectedData, expectedFlags); |
| |
|
| | |
| | EXPECT_EQ(expectedValue, id.value()); |
| | EXPECT_EQ(expectedData, id.data()); |
| | EXPECT_TRUE(id.isBinary()); |
| | } |
| |
|
| | TEST_F(StringIDTest, stringIDDefaultConstruction) |
| | { |
| | |
| | auto id = App::StringID(); |
| |
|
| | |
| | EXPECT_EQ(0, id.value()); |
| | } |
| |
|
| | TEST_F(StringIDTest, value) |
| | { |
| | |
| | const long expectedValueA {0}; |
| | auto idA = App::StringID(expectedValueA, nullptr); |
| | const long expectedValueB {42}; |
| | auto idB = App::StringID(expectedValueB, nullptr); |
| | const long expectedValueC {314159}; |
| | auto idC = App::StringID(expectedValueC, nullptr); |
| |
|
| | |
| | auto valueA = idA.value(); |
| | auto valueB = idB.value(); |
| | auto valueC = idC.value(); |
| |
|
| | |
| | EXPECT_EQ(expectedValueA, valueA); |
| | EXPECT_EQ(expectedValueB, valueB); |
| | EXPECT_EQ(expectedValueC, valueC); |
| | } |
| |
|
| | TEST_F(StringIDTest, relatedIDs) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDTest, isBinary) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::Binary); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isBinary()); |
| | EXPECT_FALSE(controlID.isBinary()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isHashed) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::Hashed); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isHashed()); |
| | EXPECT_FALSE(controlID.isHashed()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isPostfixed) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::Postfixed); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isPostfixed()); |
| | EXPECT_FALSE(controlID.isPostfixed()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isPostfixEncoded) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::PostfixEncoded); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isPostfixEncoded()); |
| | EXPECT_FALSE(controlID.isPostfixEncoded()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isIndexed) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::Indexed); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isIndexed()); |
| | EXPECT_FALSE(controlID.isIndexed()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isPrefixID) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::PrefixID); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isPrefixID()); |
| | EXPECT_FALSE(controlID.isPrefixID()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isPrefixIDIndex) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::PrefixIDIndex); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isPrefixIDIndex()); |
| | EXPECT_FALSE(controlID.isPrefixIDIndex()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isMarked) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::Marked); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isMarked()); |
| | EXPECT_FALSE(controlID.isMarked()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isPersistent) |
| | { |
| | |
| | auto flaggedID = givenFlaggedStringID(App::StringID::Flag::Persistent); |
| | auto controlID = App::StringID {}; |
| |
|
| | |
| | EXPECT_TRUE(flaggedID.isPersistent()); |
| | EXPECT_FALSE(controlID.isPersistent()); |
| | } |
| |
|
| | TEST_F(StringIDTest, isFromSameHasher) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDTest, getHasher) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDTest, data) |
| | { |
| | |
| | QByteArray expectedData {"data", 4}; |
| | auto id = App::StringID(1, expectedData); |
| |
|
| | |
| | auto data = id.data(); |
| |
|
| | |
| | EXPECT_EQ(expectedData, data); |
| | } |
| |
|
| | TEST_F(StringIDTest, postfix) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDTest, getPyObject) |
| | { |
| | |
| | Py_Initialize(); |
| | auto id = new App::StringID(1, nullptr); |
| | id->ref(); |
| |
|
| | |
| | Py::Object py(id->getPyObject(), true); |
| | id->unref(); |
| |
|
| | |
| | EXPECT_TRUE(PyObject_TypeCheck(py.ptr(), &App::StringIDPy::Type)); |
| | } |
| |
|
| | TEST_F(StringIDTest, getPyObjectWithIndex) |
| | { |
| | |
| | Py_Initialize(); |
| | auto id = new App::StringID(1, nullptr); |
| | id->ref(); |
| |
|
| | |
| | Py::Object py(id->getPyObjectWithIndex(2), true); |
| | id->unref(); |
| |
|
| | |
| | ASSERT_TRUE(PyObject_TypeCheck(py.ptr(), &App::StringIDPy::Type)); |
| | } |
| |
|
| | TEST_F(StringIDTest, toStringWithoutIndex) |
| | { |
| | |
| | const long bigHex = 0xfcad10; |
| | auto idA = App::StringID(1, QByteArray {"data", 4}); |
| | auto idB = App::StringID(bigHex, QByteArray {"data", 4}); |
| |
|
| | |
| | auto resultA = idA.toString(); |
| | auto resultB = idB.toString(); |
| |
|
| | |
| | EXPECT_EQ(std::string("#1"), resultA); |
| | EXPECT_EQ(std::string("#fcad10"), resultB); |
| | } |
| |
|
| | TEST_F(StringIDTest, toStringWithIndex) |
| | { |
| | |
| | const long bigHex = 0xfcad10; |
| | auto id = App::StringID(1, QByteArray {"data", 4}); |
| |
|
| | |
| | auto resultA = id.toString(bigHex); |
| | auto resultB = id.toString(0); |
| |
|
| | |
| | EXPECT_EQ(std::string("#1:fcad10"), resultA); |
| | EXPECT_EQ(std::string("#1"), resultB); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringWithEOFAndLengthGood) |
| | { |
| | |
| | const std::string testString {"#1:fcad"}; |
| |
|
| | |
| | auto result |
| | = App::StringID::fromString(testString.c_str(), true, static_cast<int>(testString.length())); |
| |
|
| | |
| | EXPECT_EQ(result.id, 1); |
| | EXPECT_EQ(result.index, 0xfcad); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringExtraData) |
| | { |
| | |
| | const std::string testString {"#1:fcad#2:bad"}; |
| |
|
| | |
| | auto trueResult |
| | = App::StringID::fromString(testString.c_str(), true, static_cast<int>(testString.length())); |
| | auto falseResult |
| | = App::StringID::fromString(testString.c_str(), false, static_cast<int>(testString.length())); |
| |
|
| | |
| | EXPECT_EQ(trueResult.id, -1); |
| | EXPECT_EQ(falseResult.id, 1); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringLengthUnspecified) |
| | { |
| | |
| | const std::string testString {"#1:fcad#2:bad"}; |
| |
|
| | |
| | auto trueResult = App::StringID::fromString(testString.c_str(), true); |
| | auto falseResult = App::StringID::fromString(testString.c_str(), false); |
| |
|
| | |
| | EXPECT_EQ(trueResult.id, -1); |
| | EXPECT_EQ(falseResult.id, 1); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringShorterLength) |
| | { |
| | |
| | const int dataLength {7}; |
| | const std::string testString {"#1:fcad#2:bad"}; |
| |
|
| | |
| | auto trueResult = App::StringID::fromString(testString.c_str(), true, dataLength); |
| | auto falseResult = App::StringID::fromString(testString.c_str(), false, dataLength); |
| |
|
| | |
| | EXPECT_EQ(trueResult.id, 1); |
| | EXPECT_EQ(falseResult.id, 1); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringNoHashtag) |
| | { |
| | |
| | const std::string testString {"1:fcad"}; |
| |
|
| | |
| | auto result = App::StringID::fromString(testString.c_str(), true); |
| |
|
| | |
| | EXPECT_EQ(result.id, -1); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringNotHex) |
| | { |
| | |
| | const std::string testStringA {"1:freecad"}; |
| | const std::string testStringB {"zoink:2"}; |
| |
|
| | |
| | auto resultA = App::StringID::fromString(testStringA.c_str(), false); |
| | auto resultB = App::StringID::fromString(testStringB.c_str(), false); |
| |
|
| | |
| | EXPECT_EQ(resultA.id, -1); |
| | EXPECT_EQ(resultB.id, -1); |
| | } |
| |
|
| | TEST_F(StringIDTest, fromStringQByteArray) |
| | { |
| | |
| | const QByteArray testString {"#1:fcad", 7}; |
| |
|
| | |
| | auto result = App::StringID::fromString(testString, true); |
| |
|
| | |
| | EXPECT_EQ(result.id, 1); |
| | EXPECT_EQ(result.index, 0xfcad); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToTextHashed) |
| | { |
| | |
| | QByteArray buffer {"120ca87015d849dbea060eaf2295fcc4ee981427", 40}; |
| | auto id = App::StringID(1, buffer, App::StringID::Flag::Hashed); |
| |
|
| | |
| | auto result = id.dataToText(0); |
| |
|
| | |
| | EXPECT_EQ(result, buffer.toBase64().constData()); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToTextBinary) |
| | { |
| | |
| | QByteArray buffer {"120ca87015d849dbea060eaf2295fcc4ee981427", 40}; |
| | auto id = App::StringID(1, buffer, App::StringID::Flag::Binary); |
| |
|
| | |
| | auto result = id.dataToText(0); |
| |
|
| | |
| | EXPECT_EQ(result, buffer.toBase64().constData()); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToTextNoIndex) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | auto id = App::StringID(1, data); |
| |
|
| | |
| | auto result = id.dataToText(0); |
| |
|
| | |
| | EXPECT_EQ(result, "data"); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToTextWithIndex) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | auto id = App::StringID(1, data); |
| |
|
| | |
| | auto resultA = id.dataToText(1); |
| | auto resultB = id.dataToText(1024); |
| |
|
| | |
| | EXPECT_EQ(resultA, "data1"); |
| | EXPECT_EQ(resultB, "data1024"); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToTextWithPostfix) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | QByteArray postfix {"postfix", 7}; |
| | auto id = App::StringID(1, data); |
| | id.setPostfix(postfix); |
| |
|
| | |
| | auto result = id.dataToText(1); |
| |
|
| | |
| | EXPECT_EQ(result, "data1postfix"); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToBytesNoIndex) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | auto id = App::StringID(1, data); |
| |
|
| | |
| | auto result = id.dataToBytes(); |
| |
|
| | |
| | EXPECT_EQ(data, result); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToBytesWithIndex) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | const int index {1234}; |
| | auto id = App::StringID(1, data); |
| |
|
| | |
| | auto result = id.dataToBytes(index); |
| |
|
| | |
| | EXPECT_EQ(data + QByteArray::number(index), result); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToBytesWithPostfix) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | QByteArray postfix {"postfix", 7}; |
| | auto id = App::StringID(1, data); |
| | id.setPostfix(postfix); |
| |
|
| | |
| | auto result = id.dataToBytes(); |
| |
|
| | |
| | EXPECT_EQ(data + postfix, result); |
| | } |
| |
|
| | TEST_F(StringIDTest, dataToBytesWithIndexAndPostfix) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | QByteArray postfix {"postfix", 7}; |
| | const int index {1234}; |
| | auto id = App::StringID(1, data); |
| | id.setPostfix(postfix); |
| |
|
| | |
| | auto result = id.dataToBytes(index); |
| |
|
| | |
| | EXPECT_EQ(data + QByteArray::number(index) + postfix, result); |
| | } |
| |
|
| | TEST_F(StringIDTest, mark) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | auto id = App::StringID(1, data); |
| | ASSERT_FALSE(id.isMarked()); |
| |
|
| | |
| | id.mark(); |
| |
|
| | |
| | EXPECT_TRUE(id.isMarked()); |
| | } |
| |
|
| | TEST_F(StringIDTest, setPersistent) |
| | { |
| | |
| | QByteArray data {"data", 4}; |
| | auto id = App::StringID(1, data); |
| | ASSERT_FALSE(id.isPersistent()); |
| |
|
| | |
| | id.setPersistent(true); |
| |
|
| | |
| | EXPECT_TRUE(id.isPersistent()); |
| | } |
| |
|
| | TEST_F(StringIDTest, operatorLessThan) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDTest, compare) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDTest, IndexIDBooleanConversion) |
| | { |
| | |
| | const long id {42}; |
| | const int index {123}; |
| | App::StringID::IndexID indexIdTrue {id, index}; |
| | App::StringID::IndexID indexIdFalse {0, index}; |
| |
|
| | |
| | EXPECT_TRUE(indexIdTrue); |
| | EXPECT_FALSE(indexIdFalse); |
| | } |
| |
|
| | TEST_F(StringIDTest, IndexIDStreamInsertionOperator) |
| | { |
| | |
| | const long id {42}; |
| | const int index {123}; |
| | App::StringID::IndexID indexIdNonZero {id, index}; |
| | App::StringID::IndexID indexIdZero {id, 0}; |
| | std::ostringstream stream; |
| |
|
| | |
| | stream << indexIdNonZero << " " << indexIdZero; |
| |
|
| | |
| | EXPECT_EQ("42:123 42", stream.str()); |
| | } |
| |
|
| |
|
| | class StringIDRefTest: public ::testing::Test |
| | { |
| | protected: |
| | |
| | |
| |
|
| | App::StringID* createStringID() const |
| | { |
| | return new App::StringID {_id, _data}; |
| | } |
| |
|
| | private: |
| | QByteArray _data {"data", 4}; |
| | int _id {1}; |
| | }; |
| |
|
| |
|
| | TEST_F(StringIDRefTest, defaultConstructor) |
| | { |
| | |
| | auto idRef = App::StringIDRef(); |
| |
|
| | |
| | EXPECT_FALSE(idRef); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, constructFromNewStringID) |
| | { |
| | |
| | auto idRef = App::StringIDRef(createStringID()); |
| |
|
| | |
| | EXPECT_TRUE(idRef); |
| | EXPECT_EQ(1, idRef.getRefCount()); |
| |
|
| | |
| | |
| | } |
| |
|
| | TEST_F(StringIDRefTest, constructFromStringIDAndIndex) |
| | { |
| | |
| | const int index {42}; |
| |
|
| | |
| | auto idRef = App::StringIDRef(createStringID(), index); |
| |
|
| | |
| | EXPECT_TRUE(idRef); |
| | EXPECT_EQ(1, idRef.getRefCount()); |
| | EXPECT_EQ(index, idRef.getIndex()); |
| |
|
| | |
| | |
| | } |
| |
|
| | TEST_F(StringIDRefTest, copyConstructor) |
| | { |
| | |
| | const int index {42}; |
| | auto idRef = App::StringIDRef(createStringID(), index); |
| |
|
| | |
| | auto newIdRef = App::StringIDRef(idRef); |
| |
|
| | |
| | EXPECT_TRUE(newIdRef); |
| | EXPECT_EQ(2, newIdRef.getRefCount()); |
| | EXPECT_EQ(index, idRef.getIndex()); |
| | EXPECT_EQ(index, newIdRef.getIndex()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, copyConstructorWithIndex) |
| | { |
| | |
| | const int index {42}; |
| | const int otherIndex {12345}; |
| | auto idRef = App::StringIDRef(createStringID(), index); |
| |
|
| | |
| | auto newIdRef = App::StringIDRef(idRef, otherIndex); |
| |
|
| | |
| | EXPECT_TRUE(newIdRef); |
| | EXPECT_EQ(2, newIdRef.getRefCount()); |
| | EXPECT_EQ(index, idRef.getIndex()); |
| | EXPECT_EQ(otherIndex, newIdRef.getIndex()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, moveConstructor) |
| | { |
| | |
| | auto idRef = App::StringIDRef(createStringID()); |
| |
|
| | |
| | auto newIdRef = App::StringIDRef(std::move(idRef)); |
| |
|
| | |
| | EXPECT_EQ(1, newIdRef.getRefCount()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, destructor) |
| | { |
| | |
| | auto idRef = App::StringIDRef(createStringID()); |
| |
|
| | { |
| | auto newIdRef = App::StringIDRef(idRef); |
| | ASSERT_EQ(2, idRef.getRefCount()); |
| |
|
| | |
| | |
| | } |
| |
|
| | |
| | EXPECT_EQ(1, idRef.getRefCount()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, reset) |
| | { |
| | |
| | auto idRef = App::StringIDRef(createStringID()); |
| |
|
| | |
| | idRef.reset(); |
| |
|
| | |
| | EXPECT_FALSE(idRef); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, resetWithStringID) |
| | { |
| | |
| | const int index {42}; |
| | auto idRef = App::StringIDRef(createStringID(), index); |
| |
|
| | |
| | idRef.reset(createStringID()); |
| |
|
| | |
| | EXPECT_TRUE(idRef); |
| | EXPECT_NE(index, idRef.getIndex()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, resetWithStringIDAndIndex) |
| | { |
| | |
| | const int indexA {42}; |
| | const int indexB {12345}; |
| | auto idRef = App::StringIDRef(createStringID(), indexA); |
| |
|
| | |
| | idRef.reset(createStringID(), indexB); |
| |
|
| | |
| | EXPECT_TRUE(idRef); |
| | EXPECT_EQ(indexB, idRef.getIndex()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, swap) |
| | { |
| | |
| | const int indexA {42}; |
| | const int indexB {12345}; |
| | auto idRefA = App::StringIDRef(createStringID(), indexA); |
| | auto idRefB = App::StringIDRef(createStringID(), indexB); |
| |
|
| | |
| | idRefA.swap(idRefB); |
| |
|
| | |
| | EXPECT_EQ(indexB, idRefA.getIndex()); |
| | EXPECT_EQ(indexA, idRefB.getIndex()); |
| | } |
| |
|
| | #if defined(__clang__) |
| | # pragma clang diagnostic push |
| | # pragma clang diagnostic ignored "-Wself-assign-overloaded" |
| | #endif |
| |
|
| | TEST_F(StringIDRefTest, assignmentFromSelf) |
| | { |
| | |
| | auto idRef = App::StringIDRef(createStringID()); |
| |
|
| | |
| | idRef = idRef; |
| |
|
| | |
| | EXPECT_EQ(1, idRef.getRefCount()); |
| | } |
| |
|
| | #if defined(__clang__) |
| | # pragma clang diagnostic pop |
| | #endif |
| |
|
| | TEST_F(StringIDRefTest, assignmentToEmptyFromStringID) |
| | { |
| | |
| | Py_Initialize(); |
| | auto idRef = App::StringIDRef(); |
| | ASSERT_FALSE(idRef); |
| |
|
| | |
| | idRef = createStringID(); |
| |
|
| | |
| | EXPECT_TRUE(idRef); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, assignmentFromStringIDRef) |
| | { |
| | |
| | auto firstIdRef = App::StringIDRef(createStringID()); |
| | auto firstIdRefExtra = firstIdRef; |
| | auto secondIdRef = App::StringIDRef(createStringID()); |
| |
|
| | |
| | firstIdRef = secondIdRef; |
| |
|
| | |
| | EXPECT_EQ(2, secondIdRef.getRefCount()); |
| | EXPECT_EQ(2, firstIdRef.getRefCount()); |
| | EXPECT_EQ(1, firstIdRefExtra.getRefCount()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, moveAssignmentFromStringIDRef) |
| | { |
| | auto emptyIdRef = App::StringIDRef(); |
| | auto goodIdRef = App::StringIDRef(createStringID()); |
| | ASSERT_FALSE(emptyIdRef); |
| |
|
| | |
| | emptyIdRef = std::move(goodIdRef); |
| |
|
| | |
| | EXPECT_TRUE(emptyIdRef); |
| | EXPECT_EQ(1, emptyIdRef.getRefCount()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, operatorLess) |
| | { |
| | |
| | auto emptySIDA = App::StringIDRef(); |
| | auto emptySIDB = App::StringIDRef(); |
| | auto lowID = App::StringIDRef(new App::StringID {1, nullptr}); |
| | auto highID = App::StringIDRef(new App::StringID {2, nullptr}); |
| |
|
| | |
| | EXPECT_FALSE(emptySIDA < emptySIDB); |
| | EXPECT_FALSE(emptySIDB < emptySIDA); |
| | EXPECT_TRUE(emptySIDA < lowID); |
| | EXPECT_TRUE(emptySIDA < highID); |
| | EXPECT_TRUE(lowID < highID); |
| | EXPECT_FALSE(highID < lowID); |
| |
|
| | |
| | } |
| |
|
| | TEST_F(StringIDRefTest, operatorEquality) |
| | { |
| | |
| | auto emptySIDA = App::StringIDRef(); |
| | auto emptySIDB = App::StringIDRef(); |
| | auto nonEmptyA = App::StringIDRef(new App::StringID {1, nullptr}); |
| | auto nonEmptyB = App::StringIDRef(new App::StringID {1, nullptr}); |
| | auto nonEmptyOther = App::StringIDRef(new App::StringID {2, nullptr}); |
| |
|
| | |
| | EXPECT_TRUE(emptySIDA == emptySIDB); |
| | EXPECT_TRUE(nonEmptyA == nonEmptyB); |
| | EXPECT_FALSE(emptySIDA == nonEmptyA); |
| | EXPECT_FALSE(nonEmptyA == nonEmptyOther); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, operatorInequality) |
| | { |
| | |
| | auto emptySIDA = App::StringIDRef(); |
| | auto emptySIDB = App::StringIDRef(); |
| | auto nonEmptyA = App::StringIDRef(new App::StringID {1, nullptr}); |
| | auto nonEmptyB = App::StringIDRef(new App::StringID {1, nullptr}); |
| | auto nonEmptyOther = App::StringIDRef(new App::StringID {2, nullptr}); |
| |
|
| | |
| | EXPECT_FALSE(emptySIDA != emptySIDB); |
| | EXPECT_FALSE(nonEmptyA != nonEmptyB); |
| | EXPECT_TRUE(emptySIDA != nonEmptyA); |
| | EXPECT_TRUE(nonEmptyA != nonEmptyOther); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, booleanConversion) |
| | { |
| | |
| | auto emptySID = App::StringIDRef(); |
| | auto nonEmpty = App::StringIDRef(new App::StringID {1, nullptr}); |
| |
|
| | |
| | EXPECT_FALSE(emptySID); |
| | EXPECT_TRUE(nonEmpty); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, getRefCount) |
| | { |
| | |
| | auto stringID = createStringID(); |
| | auto stringIDRef = App::StringIDRef(stringID); |
| |
|
| | |
| | auto firstCount = stringIDRef.getRefCount(); |
| | auto stringIDRef2 = App::StringIDRef(stringID); |
| | auto secondCount = stringIDRef.getRefCount(); |
| |
|
| | |
| | EXPECT_EQ(1, firstCount); |
| | EXPECT_EQ(2, secondCount); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, toString) |
| | { |
| | |
| | auto emptySID = App::StringIDRef(); |
| | auto nonEmpty = App::StringIDRef(createStringID()); |
| |
|
| | |
| | auto empty = emptySID.toString(); |
| | auto nonempty = nonEmpty.toString(); |
| |
|
| | |
| | |
| | EXPECT_TRUE(empty.empty()); |
| | EXPECT_FALSE(nonempty.empty()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, dataToText) |
| | { |
| | |
| | auto emptySID = App::StringIDRef(); |
| | auto nonEmpty = App::StringIDRef(createStringID()); |
| |
|
| | |
| | auto empty = emptySID.dataToText(); |
| | auto nonempty = nonEmpty.dataToText(); |
| |
|
| | |
| | |
| | EXPECT_TRUE(empty.empty()); |
| | EXPECT_FALSE(nonempty.empty()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, constData) |
| | { |
| | |
| | auto sid = App::StringIDRef(createStringID()); |
| |
|
| | |
| | auto constData = sid.constData(); |
| |
|
| | |
| | ASSERT_NE(constData, nullptr); |
| | EXPECT_STREQ(constData, "data"); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, deref) |
| | { |
| | |
| | auto sid = createStringID(); |
| | auto ref = App::StringIDRef(sid); |
| |
|
| | |
| | EXPECT_EQ(sid, &(ref.deref())); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, value) |
| | { |
| | |
| | auto empty = App::StringIDRef(); |
| | auto nonEmpty = App::StringIDRef(createStringID()); |
| |
|
| | |
| | auto emptyValue = empty.value(); |
| | auto nonEmptyValue = nonEmpty.value(); |
| |
|
| | |
| | EXPECT_EQ(0, emptyValue); |
| | EXPECT_NE(0, nonEmptyValue); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, relatedIDs) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDRefTest, isBinary) |
| | { |
| | |
| | auto nothing = App::StringIDRef(); |
| | auto binary = App::StringIDRef(new App::StringID {1, nullptr, App::StringID::Flag::Binary}); |
| | auto nonBinary = App::StringIDRef(new App::StringID {1, nullptr, App::StringID::Flag::None}); |
| |
|
| | |
| | EXPECT_FALSE(nothing.isBinary()); |
| | EXPECT_TRUE(binary.isBinary()); |
| | EXPECT_FALSE(nonBinary.isBinary()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, isHashed) |
| | { |
| | |
| | auto nothing = App::StringIDRef(); |
| | auto hashed = App::StringIDRef(new App::StringID {1, nullptr, App::StringID::Flag::Hashed}); |
| | auto nonHashed = App::StringIDRef(new App::StringID {1, nullptr, App::StringID::Flag::None}); |
| |
|
| | |
| | EXPECT_FALSE(nothing.isHashed()); |
| | EXPECT_TRUE(hashed.isHashed()); |
| | EXPECT_FALSE(nonHashed.isHashed()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, toBytes) |
| | { |
| | |
| | QByteArray byteStorage; |
| | auto ref = App::StringIDRef(createStringID()); |
| |
|
| | |
| | ref.toBytes(byteStorage); |
| |
|
| | |
| | EXPECT_FALSE(byteStorage.isNull()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, getPyObject) |
| | { |
| | Py_Initialize(); |
| | |
| | auto ref = App::StringIDRef(createStringID()); |
| | auto empty = App::StringIDRef(); |
| |
|
| | |
| | Py::Object pyObject(ref.getPyObject(), true); |
| | Py::Object none(empty.getPyObject(), true); |
| |
|
| | |
| | EXPECT_TRUE(PyObject_TypeCheck(pyObject.ptr(), &App::StringIDPy::Type)); |
| | EXPECT_EQ(none.ptr(), Py_None); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, mark) |
| | { |
| | |
| | auto ref = App::StringIDRef(createStringID()); |
| | ASSERT_FALSE(ref.isMarked()); |
| |
|
| | |
| | ref.mark(); |
| |
|
| | |
| | EXPECT_TRUE(ref.isMarked()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, isMarked) |
| | { |
| | |
| | auto marked = App::StringIDRef(new App::StringID(1, nullptr, App::StringID::Flag::Marked)); |
| | auto notMarked = App::StringIDRef(createStringID()); |
| |
|
| | |
| | EXPECT_TRUE(marked.isMarked()); |
| | EXPECT_FALSE(notMarked.isMarked()); |
| | } |
| |
|
| | TEST_F(StringIDRefTest, isFromSameHasher) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDRefTest, getHasher) |
| | { |
| | |
| | } |
| |
|
| | TEST_F(StringIDRefTest, setPersistent) |
| | { |
| | |
| | auto persistent = App::StringIDRef(createStringID()); |
| | ASSERT_FALSE(persistent.deref().isPersistent()); |
| |
|
| | |
| | persistent.setPersistent(true); |
| |
|
| | |
| | ASSERT_TRUE(persistent.deref().isPersistent()); |
| | } |
| |
|
| |
|
| | class StringHasherTest: public ::testing::Test |
| | { |
| | protected: |
| | void SetUp() override |
| | { |
| | Py_Initialize(); |
| | _hasher = Base::Reference<App::StringHasher>(new App::StringHasher); |
| | } |
| |
|
| | void TearDown() override |
| | { |
| | _hasher->clear(); |
| | } |
| |
|
| | Base::Reference<App::StringHasher> Hasher() |
| | { |
| | return _hasher; |
| | } |
| |
|
| | static Data::MappedName givenMappedName(const char* name, const char* postfix = nullptr) |
| | { |
| | QByteArray expectedPrefix {name, static_cast<int>(std::strlen(name))}; |
| | Data::MappedName mappedName(expectedPrefix); |
| | if (postfix) { |
| | QByteArray expectedPostfix {postfix, static_cast<int>(std::strlen(postfix))}; |
| | Data::MappedName mappedNameA(mappedName, expectedPostfix.data()); |
| | return mappedNameA; |
| | } |
| | return mappedName; |
| | } |
| |
|
| | |
| | |
| | App::StringIDRef givenSomeHashedValues() |
| | { |
| | const std::string prefix {"Test1"}; |
| | const std::string postfix {";:M;FUS;:Hb:7,F"}; |
| | auto mappedName = givenMappedName(prefix.c_str(), postfix.c_str()); |
| | QVector<App::StringIDRef> sids; |
| | auto ID = Hasher()->getID(mappedName, sids); |
| | ID.mark(); |
| | |
| | return ID; |
| | } |
| |
|
| | private: |
| | Base::Reference<App::StringHasher> _hasher; |
| | }; |
| |
|
| | TEST_F(StringHasherTest, defaultConstructor) |
| | { |
| | |
| | |
| |
|
| | |
| | |
| |
|
| | |
| | EXPECT_EQ(0, Hasher()->size()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getMemSize) |
| | { |
| | |
| | givenSomeHashedValues(); |
| |
|
| | |
| | auto result = Hasher()->getMemSize(); |
| |
|
| | |
| | |
| | |
| | EXPECT_LT(Hasher()->size(), result); |
| | } |
| |
|
| | TEST_F(StringHasherTest, Save) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | TEST_F(StringHasherTest, Restore) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | TEST_F(StringHasherTest, SaveDocFile) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | TEST_F(StringHasherTest, RestoreDocFile) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | TEST_F(StringHasherTest, setPersistenceFileName) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | TEST_F(StringHasherTest, getPersistenceFileName) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayShort) |
| | { |
| | |
| | const std::array<char, 5> string {"data"}; |
| | QByteArray qba(string.data(), string.size()); |
| | Hasher()->setThreshold(string.size() + 1); |
| |
|
| | |
| | auto id = Hasher()->getID(qba, App::StringHasher::Option::Hashable); |
| |
|
| | |
| | EXPECT_STREQ(string.data(), id.constData()); |
| | EXPECT_FALSE(id.isHashed()); |
| | EXPECT_NE(qba.constData(), id.constData()); |
| | EXPECT_EQ(2, id.getRefCount()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayLongHashable) |
| | { |
| | |
| | const std::array<char, 47> string {"data that is longer than our hasher threshold"}; |
| | QByteArray qba(string.data(), string.size()); |
| | Hasher()->setThreshold(string.size() - 1); |
| |
|
| | |
| | auto id = Hasher()->getID(qba, App::StringHasher::Option::Hashable); |
| |
|
| | |
| | EXPECT_STRNE(string.data(), id.constData()); |
| | EXPECT_TRUE(id.isHashed()); |
| | EXPECT_NE(qba.constData(), id.constData()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayLongUnhashable) |
| | { |
| | |
| | const std::array<char, 47> string {"data that is longer than our hasher threshold"}; |
| | QByteArray qba(string.data(), string.size()); |
| | Hasher()->setThreshold(string.size() - 1); |
| |
|
| | |
| | auto id = Hasher()->getID(qba, App::StringHasher::Option::None); |
| |
|
| | |
| | EXPECT_STREQ(string.data(), id.constData()); |
| | EXPECT_FALSE(id.isHashed()); |
| | EXPECT_NE(qba.constData(), id.constData()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayNoCopy) |
| | { |
| | |
| | const std::array<char, 5> string {"data"}; |
| | QByteArray qba(string.data(), string.size()); |
| | Hasher()->setThreshold(string.size() + 1); |
| |
|
| | |
| | auto id = Hasher()->getID(qba, App::StringHasher::Option::NoCopy); |
| |
|
| | |
| | EXPECT_STREQ(string.data(), id.constData()); |
| | EXPECT_EQ(qba.constData(), id.constData()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayTwoDifferentStrings) |
| | { |
| | |
| | const std::array<char, 6> stringA {"dataA"}; |
| | QByteArray qbaA(stringA.data(), stringA.size()); |
| | const std::array<char, 6> stringB {"dataB"}; |
| | QByteArray qbaB(stringB.data(), stringB.size()); |
| |
|
| | |
| | auto idA = Hasher()->getID(qbaA); |
| | auto idB = Hasher()->getID(qbaB); |
| |
|
| | |
| | EXPECT_NE(idA.dataToText(), idB.dataToText()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayTwoIdenticalStrings) |
| | { |
| | |
| | const std::array<char, 5> stringA {"data"}; |
| | QByteArray qbaA(stringA.data(), stringA.size()); |
| | const std::array<char, 5> stringB {"data"}; |
| | QByteArray qbaB(stringB.data(), stringB.size()); |
| |
|
| | |
| | auto idA = Hasher()->getID(qbaA); |
| | auto idB = Hasher()->getID(qbaB); |
| |
|
| | |
| | EXPECT_EQ(idA.dataToText(), idB.dataToText()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromQByteArrayBinaryFlag) |
| | { |
| | |
| | const std::array<char, 5> string {"data"}; |
| | QByteArray qba(string.data(), string.size()); |
| |
|
| | |
| | auto id = Hasher()->getID(qba, App::StringHasher::Option::Binary); |
| |
|
| | |
| | EXPECT_TRUE(id.isBinary()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromCString) |
| | { |
| | |
| | |
| | |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameWithoutPostfixWithoutIndex) |
| | { |
| | |
| | const char* name {"Face"}; |
| | QByteArray expectedPrefix {name, static_cast<int>(std::strlen(name))}; |
| | Data::MappedName mappedName1(expectedPrefix); |
| | QVector<App::StringIDRef> sids; |
| |
|
| | |
| | auto id = Hasher()->getID(mappedName1, sids); |
| |
|
| | |
| | EXPECT_EQ(id.dataToText(), mappedName1.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameWithoutPostfixWithIndex) |
| | { |
| | |
| | const char* expectedName {"Face"}; |
| | QByteArray expectedPrefix {expectedName, static_cast<int>(std::strlen(expectedName))}; |
| | const char* name {"Face3"}; |
| | QByteArray prefix {name, static_cast<int>(std::strlen(name))}; |
| | Data::MappedName mappedName1(prefix); |
| | QVector<App::StringIDRef> sids; |
| |
|
| | |
| | auto id = Hasher()->getID(mappedName1, sids); |
| |
|
| | |
| | EXPECT_EQ(id.dataToText(), mappedName1.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameWithoutIndexWithPostfix) |
| | { |
| | |
| | const char* name {"Face"}; |
| | QByteArray expectedPrefix {name, static_cast<int>(std::strlen(name))}; |
| | const char* postfix {";:M;FUS;:Hb:7,F"}; |
| | QByteArray expectedPostfix {postfix, static_cast<int>(std::strlen(postfix))}; |
| | Data::MappedName mappedName1(expectedPrefix); |
| | Data::MappedName mappedName2(mappedName1, expectedPostfix.data()); |
| | QVector<App::StringIDRef> sids; |
| |
|
| | |
| | auto id = Hasher()->getID(mappedName2, sids); |
| |
|
| | |
| | EXPECT_EQ(expectedPrefix, id.deref().data()); |
| | EXPECT_EQ(expectedPostfix, id.deref().postfix()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameWithIndexWithPostfix) |
| | { |
| | |
| | const char* name {"Face3"}; |
| | QByteArray expectedPrefix {name, static_cast<int>(std::strlen(name))}; |
| | const char* postfix {";:M;FUS;:Hb:7,F"}; |
| | QByteArray expectedPostfix {postfix, static_cast<int>(std::strlen(postfix))}; |
| | Data::MappedName mappedName1(expectedPrefix); |
| | Data::MappedName mappedName2(mappedName1, expectedPostfix.data()); |
| | QVector<App::StringIDRef> sids; |
| |
|
| | |
| | auto id = Hasher()->getID(mappedName2, sids); |
| |
|
| | |
| | EXPECT_EQ(id.dataToText(), mappedName2.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameExistingNameNoIndex) |
| | { |
| | |
| | Data::MappedName mappedName1 = givenMappedName("SomeTestName"); |
| | QVector<App::StringIDRef> sids; |
| | auto firstIDInserted = Hasher()->getID(mappedName1, sids); |
| | ASSERT_EQ(1, Hasher()->size()); |
| |
|
| | |
| | auto secondIDInserted = Hasher()->getID(mappedName1, sids); |
| |
|
| | |
| | EXPECT_EQ(secondIDInserted.dataToText(), mappedName1.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameExistingNameWithIndex) |
| | { |
| | |
| | auto mappedNameA = givenMappedName("Test1"); |
| | auto mappedNameB = givenMappedName("Test2"); |
| | QVector<App::StringIDRef> sids; |
| | auto firstIDInserted = Hasher()->getID(mappedNameA, sids); |
| |
|
| | |
| | auto secondIDInserted = Hasher()->getID(mappedNameB, sids); |
| |
|
| | |
| | EXPECT_EQ(firstIDInserted.dataToText(), mappedNameA.toString()); |
| | EXPECT_EQ(secondIDInserted.dataToText(), mappedNameB.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameExistingNameWithIndexAndPostfix) |
| | { |
| | |
| | auto mappedNameA = givenMappedName("Test1", ";:M;FUS;:Hb:7,F"); |
| | auto mappedNameB = givenMappedName("Test2", ";:M;FUS;:Hb:7,F"); |
| | QVector<App::StringIDRef> sids; |
| | auto firstIDInserted = Hasher()->getID(mappedNameA, sids); |
| |
|
| | |
| | auto secondIDInserted = Hasher()->getID(mappedNameB, sids); |
| |
|
| | |
| | EXPECT_EQ(firstIDInserted.dataToText(), mappedNameA.toString()); |
| | EXPECT_EQ(secondIDInserted.dataToText(), mappedNameB.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromMappedNameDuplicateWithEncodedPostfix) |
| | { |
| | |
| | auto mappedNameA = givenMappedName("Test1", ";:M;FUS;:Hb:7,F"); |
| | auto mappedNameB = givenMappedName("Test1", "#1"); |
| | QVector<App::StringIDRef> sids; |
| | auto firstIDInserted = Hasher()->getID(mappedNameA, sids); |
| |
|
| | |
| | auto secondIDInserted = Hasher()->getID(mappedNameB, sids); |
| |
|
| | |
| | EXPECT_EQ(firstIDInserted.dataToText(), mappedNameA.toString()); |
| | EXPECT_EQ(secondIDInserted.dataToText(), mappedNameB.toString()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromIntegerIDNoSuchID) |
| | { |
| | |
| | |
| |
|
| | |
| | auto result = Hasher()->getID(1); |
| |
|
| | |
| | EXPECT_FALSE(result); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getIDFromIntegerIDBadID) |
| | { |
| | |
| | const std::string prefix {"Test1"}; |
| | auto mappedName = givenMappedName(prefix.c_str()); |
| | QVector<App::StringIDRef> sids; |
| | auto inserted = Hasher()->getID(mappedName, sids); |
| | ASSERT_EQ(1, Hasher()->size()); |
| |
|
| | |
| | auto result = Hasher()->getID(-1); |
| |
|
| | |
| | EXPECT_FALSE(result); |
| | } |
| |
|
| |
|
| | TEST_F(StringHasherTest, getIDMap) |
| | { |
| | |
| | givenSomeHashedValues(); |
| |
|
| | |
| | auto map = Hasher()->getIDMap(); |
| |
|
| | |
| | EXPECT_GT(map.size(), 0); |
| | } |
| |
|
| | TEST_F(StringHasherTest, clear) |
| | { |
| | |
| | givenSomeHashedValues(); |
| |
|
| | |
| | Hasher()->clear(); |
| |
|
| | |
| | EXPECT_EQ(0, Hasher()->size()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, size) |
| | { |
| | |
| | givenSomeHashedValues(); |
| |
|
| | |
| | auto result = Hasher()->size(); |
| |
|
| | |
| | EXPECT_GT(result, 0); |
| | } |
| |
|
| | TEST_F(StringHasherTest, count) |
| | { |
| | |
| | givenSomeHashedValues(); |
| |
|
| | |
| | auto result = Hasher()->count(); |
| |
|
| | |
| | EXPECT_GT(result, 0); |
| | } |
| |
|
| | TEST_F(StringHasherTest, getPyObject) |
| | { |
| | |
| |
|
| | |
| | Py::Object py(Hasher()->getPyObject(), true); |
| |
|
| | |
| | EXPECT_TRUE(PyObject_TypeCheck(py.ptr(), &App::StringHasherPy::Type)); |
| | } |
| |
|
| | TEST_F(StringHasherTest, setGetSaveAll) |
| | { |
| | |
| |
|
| | |
| | Hasher()->setSaveAll(true); |
| | bool expectedTrue = Hasher()->getSaveAll(); |
| | Hasher()->setSaveAll(false); |
| | bool expectedFalse = Hasher()->getSaveAll(); |
| |
|
| | |
| | EXPECT_TRUE(expectedTrue); |
| | EXPECT_FALSE(expectedFalse); |
| | } |
| |
|
| | TEST_F(StringHasherTest, setGetThreshold) |
| | { |
| | |
| | const int expectedThreshold {42}; |
| |
|
| | |
| | Hasher()->setThreshold(expectedThreshold); |
| | auto foundThreshold = Hasher()->getThreshold(); |
| |
|
| | |
| | EXPECT_EQ(expectedThreshold, foundThreshold); |
| | } |
| |
|
| | TEST_F(StringHasherTest, clearMarks) |
| | { |
| | |
| | auto ref = givenSomeHashedValues(); |
| | ref.mark(); |
| | ASSERT_TRUE(ref.isMarked()); |
| |
|
| | |
| | Hasher()->clearMarks(); |
| |
|
| | |
| | ASSERT_FALSE(ref.isMarked()); |
| | } |
| |
|
| | TEST_F(StringHasherTest, compact) |
| | { |
| | |
| | givenSomeHashedValues(); |
| |
|
| | |
| | Hasher()->compact(); |
| |
|
| | |
| | EXPECT_EQ(0, Hasher()->count()); |
| | } |
| |
|