| | |
| |
|
| | #include <gtest/gtest.h> |
| | #include <utility> |
| | #include <map> |
| | #include <string> |
| | #include <vector> |
| |
|
| |
|
| | #include "App/IndexedName.h" |
| | #include "App/MappedElement.h" |
| |
|
| | class MappedElementTest: public ::testing::Test |
| | { |
| | protected: |
| | |
| |
|
| | |
| |
|
| | |
| | static Data::MappedElement givenMappedElement(const char* index, const char* name) |
| | { |
| | Data::IndexedName indexedName {index}; |
| | Data::MappedName mappedName {name}; |
| | return {indexedName, mappedName}; |
| | } |
| | }; |
| |
|
| | TEST_F(MappedElementTest, constructFromNameAndIndex) |
| | { |
| | |
| | Data::IndexedName indexedName {"EDGE1"}; |
| | Data::MappedName mappedName {"OTHER_NAME"}; |
| |
|
| | |
| | Data::MappedElement mappedElement {indexedName, mappedName}; |
| |
|
| | |
| | EXPECT_EQ(mappedElement.index, indexedName); |
| | EXPECT_EQ(mappedElement.name, mappedName); |
| | } |
| |
|
| | TEST_F(MappedElementTest, moveConstructor) |
| | { |
| | |
| | auto originalMappedElement = givenMappedElement("EDGE1", "OTHER_NAME"); |
| | auto originalName = originalMappedElement.name; |
| | auto originalIndex = originalMappedElement.index; |
| |
|
| | |
| | Data::MappedElement newMappedElement {std::move(originalMappedElement)}; |
| |
|
| | |
| | EXPECT_EQ(originalName, newMappedElement.name); |
| | EXPECT_EQ(originalIndex, newMappedElement.index); |
| | } |
| |
|
| | TEST_F(MappedElementTest, assignmentOperator) |
| | { |
| | |
| | auto mappedElementA = givenMappedElement("EDGE1", "OTHER_NAME"); |
| | auto mappedElementB = givenMappedElement("EDGE2", "ANOTHER_NAME"); |
| | EXPECT_NE(mappedElementA, mappedElementB); |
| |
|
| | |
| | mappedElementA = mappedElementB; |
| |
|
| | |
| | EXPECT_EQ(mappedElementA, mappedElementB); |
| | } |
| |
|
| | TEST_F(MappedElementTest, moveAssignmentOperator) |
| | { |
| | |
| | auto mappedElementA = givenMappedElement("EDGE1", "OTHER_NAME"); |
| | auto mappedElementB = givenMappedElement("EDGE2", "ANOTHER_NAME"); |
| | EXPECT_NE(mappedElementA, mappedElementB); |
| |
|
| | |
| | mappedElementA = std::move(mappedElementB); |
| |
|
| | |
| | EXPECT_EQ(mappedElementA.name.toString(), "ANOTHER_NAME"); |
| | EXPECT_EQ(mappedElementA.index.toString(), "EDGE2"); |
| | } |
| |
|
| | TEST_F(MappedElementTest, equalityOperatorsWhenNotEqual) |
| | { |
| | |
| | auto mappedElementA = givenMappedElement("EDGE1", "OTHER_NAME"); |
| | auto mappedElementB = givenMappedElement("EDGE2", "ANOTHER_NAME"); |
| |
|
| | |
| | bool aAndBAreEqual = mappedElementA == mappedElementB; |
| | bool aAndBAreNotEqual = mappedElementA != mappedElementB; |
| |
|
| | |
| | EXPECT_TRUE(aAndBAreNotEqual); |
| | EXPECT_FALSE(aAndBAreEqual); |
| | } |
| |
|
| | TEST_F(MappedElementTest, equalityOperatorsWhenEqual) |
| | { |
| | |
| | auto mappedElementA = givenMappedElement("EDGE1", "OTHER_NAME"); |
| | auto mappedElementB = givenMappedElement("EDGE1", "OTHER_NAME"); |
| |
|
| | |
| | bool aAndBAreEqual = mappedElementA == mappedElementB; |
| | bool aAndBAreNotEqual = mappedElementA != mappedElementB; |
| |
|
| | |
| | EXPECT_FALSE(aAndBAreNotEqual); |
| | EXPECT_TRUE(aAndBAreEqual); |
| | } |
| |
|
| | TEST_F(MappedElementTest, lessThanOperator) |
| | { |
| | |
| |
|
| | |
| | auto mappedElement1A = givenMappedElement("EDGE1", "A"); |
| | auto mappedElement1B = givenMappedElement("EDGE1", "B"); |
| | auto mappedElement2A = givenMappedElement("EDGE2", "A"); |
| | auto mappedElement2B = givenMappedElement("EDGE2", "B"); |
| | auto mappedElement2BDuplicate = givenMappedElement("EDGE2", "B"); |
| |
|
| | |
| | EXPECT_TRUE(mappedElement1A < mappedElement1B); |
| | EXPECT_TRUE(mappedElement1A < mappedElement2A); |
| | EXPECT_TRUE(mappedElement1B < mappedElement2A); |
| | EXPECT_FALSE(mappedElement2A < mappedElement1B); |
| | EXPECT_FALSE(mappedElement2B < mappedElement2BDuplicate); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorBothAreZeroSize) |
| | { |
| | |
| | Data::MappedName mappedName1 {""}; |
| | Data::MappedName mappedName2 {""}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_FALSE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorOneIsZeroSize) |
| | { |
| | |
| | Data::MappedName mappedName1 {""}; |
| | Data::MappedName mappedName2 {"#12345"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_TRUE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorBothStartWithHexDigitsThatDiffer) |
| | { |
| | |
| | Data::MappedName mappedName1 {"#fed;B"}; |
| | Data::MappedName mappedName2 {"#abcdef;A"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_TRUE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorBothStartWithTheSameHexDigits) |
| | { |
| | |
| | Data::MappedName mappedName1 {"#12345;B"}; |
| | Data::MappedName mappedName2 {"#12345;A"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_FALSE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorHexWithoutTerminator) |
| | { |
| | |
| | Data::MappedName mappedName1 {"#fed"}; |
| | Data::MappedName mappedName2 {"#abcdef"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_TRUE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorHexWithoutTerminatorSameLength) |
| | { |
| | |
| | Data::MappedName mappedName1 {"#fed"}; |
| | Data::MappedName mappedName2 {"#abc"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_FALSE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorNoHexDigitsLexicalCompare) |
| | { |
| | |
| | Data::MappedName mappedName1 {"A"}; |
| | Data::MappedName mappedName2 {"B"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_TRUE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorNoHexDigitsSameStringNumericCompare) |
| | { |
| | |
| | Data::MappedName mappedName1 {"Edge123456;"}; |
| | Data::MappedName mappedName2 {"Edge321;"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_FALSE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorIntegerWithoutTerminatorIsBroken) |
| | { |
| | |
| | Data::MappedName mappedName1 {"Edge123456"}; |
| | Data::MappedName mappedName2 {"Edge321"}; |
| | auto comp = Data::ElementNameComparator(); |
| |
|
| | |
| | EXPECT_FALSE(comp(mappedName1, mappedName2)); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorThreeComplexHexNamesInMap) |
| | { |
| | |
| | Data::MappedName name1("#19c9:e;:U;FUS;:Hce4:7,E"); |
| | Data::MappedName name2("#1dadb:11;:L#1061a;FUS;:H:d,E"); |
| | Data::MappedName name3("#1dae6:8;:L#1dae4;FUS;:H:d,E"); |
| |
|
| | std::map<Data::MappedName, int, Data::ElementNameComparator> testMap; |
| | testMap[name1] = 1; |
| | testMap[name2] = 2; |
| | testMap[name3] = 3; |
| |
|
| | |
| | EXPECT_EQ(testMap.size(), 3); |
| |
|
| | |
| | std::vector<std::string> keys; |
| | for (const auto& kv : testMap) { |
| | keys.push_back(kv.first.toString()); |
| | } |
| |
|
| | |
| | |
| |
|
| | |
| | |
| | |
| | std::vector<std::string> expectedOrder = { |
| | "#19c9:e;:U;FUS;:Hce4:7,E", |
| | "#1dadb:11;:L#1061a;FUS;:H:d,E", |
| | "#1dae6:8;:L#1dae4;FUS;:H:d,E" |
| | }; |
| |
|
| | EXPECT_EQ(keys, expectedOrder); |
| | } |
| |
|
| | TEST_F(MappedElementTest, comparatorLargerWorkedExampleWithMap) |
| | { |
| | |
| | Data::MappedName name0("Edge123;:U;FUS;:Hce4:7,E"); |
| | Data::MappedName name1("#1dad:e;:U;FUS;:Hce4:7,E"); |
| | Data::MappedName name2("#1dadb:11;:L#1061a;FUS;:H:d,E"); |
| | Data::MappedName name3("#1dae6:8;:L#1dae4;FUS;:H:d,E"); |
| | Data::MappedName name4("Edge999;;:L#1dae4;FUS;:H:d,E"); |
| | Data::MappedName name5("g4v2;SKT;:H1234,F;:H5678:2,E;:G0(g1;SKT;:H9012,E);XTR;:H3456:2,F"); |
| |
|
| |
|
| | std::map<Data::MappedName, int, Data::ElementNameComparator> testMap; |
| | testMap[name0] = 1; |
| | testMap[name1] = 2; |
| | testMap[name2] = 3; |
| | testMap[name3] = 4; |
| | testMap[name0] = 5; |
| | testMap[name1] = 6; |
| | testMap[name4] = 7; |
| | testMap[name4] = 8; |
| | testMap[name2] = 9; |
| | testMap[name3] = 10; |
| | testMap[name5] = 11; |
| |
|
| | |
| | EXPECT_EQ(testMap.size(), 6); |
| |
|
| | |
| | std::vector<std::string> keys; |
| | for (const auto& kv : testMap) { |
| | keys.push_back(kv.first.toString()); |
| | } |
| |
|
| | |
| | |
| |
|
| | |
| | |
| | |
| | std::vector<std::string> expectedOrder = { |
| | "Edge123;:U;FUS;:Hce4:7,E", |
| | "Edge999;;:L#1dae4;FUS;:H:d,E", |
| | "g4v2;SKT;:H1234,F;:H5678:2,E;:G0(g1;SKT;:H9012,E);XTR;:H3456:2,F", |
| | "#1dad:e;:U;FUS;:Hce4:7,E", |
| | "#1dadb:11;:L#1061a;FUS;:H:d,E", |
| | "#1dae6:8;:L#1dae4;FUS;:H:d,E" |
| | }; |
| |
|
| | EXPECT_EQ(keys, expectedOrder); |
| | } |
| |
|