#include <iostream>
#include <utility>

#include "storage/indexes/index.hpp"

// boilerplate
using std::cout;
using std::endl;

// types
using StringUniqueKeyAsc = UniqueKeyAsc<std::shared_ptr<std::string>>;
using index_t = Index<StringUniqueKeyAsc, std::string>;

int main(void)
{
    // index creation
    auto index = std::make_shared<index_t>();

    // prepare values
    StringUniqueKeyAsc key(std::make_shared<std::string>("test_key"));
    auto value_ptr = std::make_shared<std::string>("test_value");

    // insert into and unpack pair
    index_t::skiplist_t::Iterator find_iterator;
    bool insertion_succeeded;
    std::tie(find_iterator, insertion_succeeded) = 
        index->insert(key, value_ptr.get());
    assert(insertion_succeeded == true);
    
    // get inserted value
    auto inserted_value = *index->find(key);
    assert(*inserted_value.second == *value_ptr);

    return 0;
}