| #include <util/hei_flyweight.hpp> |
| |
| #include "gtest/gtest.h" |
| |
| using namespace libhei; |
| |
| class Foo |
| { |
| public: |
| Foo() = default; |
| explicit Foo( int i ) : iv_i(i) {} |
| int get() const { return iv_i; } |
| bool operator==( const Foo & i_r ) const { return iv_i == i_r.iv_i; } |
| bool operator<( const Foo & i_r ) const { return iv_i < i_r.iv_i; } |
| private: |
| int iv_i = 0; |
| }; |
| |
| Foo & addFoo( int i ) |
| { |
| return Flyweight<Foo>::getSingleton().get( Foo { i } ); |
| } |
| |
| TEST( FlyweightTest, TestSet1 ) |
| { |
| // Add some unique entries in a random order and keep track of where those |
| // enties exist in memory. |
| Foo * a[5]; |
| a[1] = &(addFoo(1)); |
| a[2] = &(addFoo(2)); |
| a[0] = &(addFoo(0)); |
| a[4] = &(addFoo(4)); |
| a[3] = &(addFoo(3)); |
| |
| // Now add more entries and verify the 'new' entries match the same |
| // addresses as the previously added entries. |
| for ( int i = 4; i >= 0; i-- ) |
| { |
| ASSERT_EQ( a[i], &(addFoo(i)) ); |
| } |
| |
| // At this point, we have proven that duplicate entries will return |
| // references to the original unique entries. There is probably more we can |
| // do here, but this is enough to prove the Flyweight class follows the |
| // flyweight design pattern. |
| } |