#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.
}
