1#include <Core/Utils/BijectiveAssociation.hpp>
2#include <catch2/catch_test_macros.hpp>
8using namespace Ra::Core::Utils;
10TEST_CASE(
"Core/Utils/BijectiveAssociation",
11 "[unittests][Core][Core/Utils][BijectiveAssociation]" ) {
13 SECTION(
"Bijection between different types" ) {
15 myTranslator.
insert(
"Three", 3 );
16 myTranslator.insert( {
"Four", 4 } );
18 REQUIRE( myTranslator(
"Four" ) == 4 );
19 REQUIRE( myTranslator.key( 3 ) ==
"Three" );
20 REQUIRE( myTranslator.value(
"One" ) == 1 );
21 REQUIRE( myTranslator.key( 2 ) ==
"Two" );
23 auto res = myTranslator.insert(
"Four", 2 );
26 auto n = myTranslator.size();
30 SECTION(
"Bijection between same types" ) {
33 myTranslator.
insert(
"Three",
"Trois" );
34 REQUIRE( myTranslator.insert( {
"Four",
"Quatre" } ) );
35 REQUIRE( !myTranslator.insert(
36 {
"Four",
"Quatre" } ) );
38 REQUIRE( myTranslator(
"Four" ) ==
"Quatre" );
39 REQUIRE( myTranslator.value(
"Three" ) ==
"Trois" );
40 REQUIRE( myTranslator.key(
"Deux" ) ==
"Two" );
43 SECTION(
"Iterators on Bijective association" ) {
45 {
"One",
"Un" }, {
"Two",
"Deux" }, {
"Three",
"Trois" } };
46 for (
const auto& e : myTranslator ) {
47 REQUIRE( myTranslator.value( e.first ) == e.second );
48 REQUIRE( myTranslator.key( e.second ) == e.first );
52 SECTION(
"Erase, replace, get undef." ) {
54 {
"Foo", 1 }, {
"Bar", 2 }, {
"Baz", 3 } };
59 REQUIRE( !myTranslator.valueIfExists(
"Faz" ) );
60 REQUIRE( !myTranslator.keyIfExists( 4 ) );
62 REQUIRE( myTranslator.value(
"Foo" ) == 1 );
63 REQUIRE( myTranslator.key( 1 ) ==
"Foo" );
64 myTranslator.replace(
"Foo", 4 );
65 REQUIRE( myTranslator.value(
"Foo" ) == 4 );
66 REQUIRE( myTranslator.key( 4 ) ==
"Foo" );
68 REQUIRE( myTranslator.remove(
"Bar", 2 ) );
69 REQUIRE( !myTranslator.remove(
"Unknown", 6 ) );
70 REQUIRE( myTranslator.insert(
"Bar", 6 ) );
71 REQUIRE( myTranslator.value(
"Bar" ) == 6 );
72 REQUIRE( myTranslator.key( 6 ) ==
"Bar" );
74 REQUIRE( myTranslator.value(
"Foo" ) == 4 );
75 REQUIRE( myTranslator.key( 4 ) ==
"Foo" );
76 myTranslator.replace(
"Faz", 4 );
77 REQUIRE( myTranslator.value(
"Faz" ) == 4 );
78 REQUIRE( myTranslator.key( 4 ) ==
"Faz" );
Bijective association between two sets {keys} and {values} having the same cardinality....
bool insert(std::pair< key_type, value_type > p)
Insert a pair into the association.