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