#include "config.h"
#include <gtest/gtest.h>
#include <libcouchbase/couchbase.h>
#include "list.h"
class CCBC_103 : public ::testing::Test
{
};
typedef struct {
lcb_list_t list;
} event_t;
typedef struct {
event_t events;
} io_cookie;
TEST_F(CCBC_103, lists)
{
io_cookie instance;
event_t e1, e2, e3, e4;
lcb_list_init(&instance.events.list);
lcb_list_append(&instance.events.list, &e1.list);
ASSERT_EQ(&e1.list, instance.events.list.prev);
lcb_list_append(&instance.events.list, &e2.list);
ASSERT_EQ(&e2.list, instance.events.list.prev);
lcb_list_append(&instance.events.list, &e3.list);
ASSERT_EQ(&e3.list, instance.events.list.prev);
lcb_list_append(&instance.events.list, &e4.list);
ASSERT_EQ(&e4.list, instance.events.list.prev);
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e1.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e2.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e3.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e4.list));
lcb_list_delete(&e2.list);
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e1.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e2.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e3.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e4.list));
lcb_list_delete(&e1.list);
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e1.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e2.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e3.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e4.list));
lcb_list_delete(&e4.list);
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e1.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e2.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e3.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e4.list));
lcb_list_delete(&e3.list);
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e1.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e2.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e3.list));
ASSERT_EQ(0, lcb_list_contains(&instance.events.list, &e4.list));
lcb_list_append(&instance.events.list, &e1.list);
lcb_list_append(&instance.events.list, &e2.list);
lcb_list_append(&instance.events.list, &e3.list);
lcb_list_append(&instance.events.list, &e4.list);
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e1.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e2.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e3.list));
ASSERT_EQ(1, lcb_list_contains(&instance.events.list, &e4.list));
}