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