1 #include <rlookup.h>
2 #include <gtest/gtest.h>
3
4 class RLookupTest : public ::testing::Test {};
5
TEST_F(RLookupTest,testInit)6 TEST_F(RLookupTest, testInit) {
7 RLookup lk = {0};
8 RLookup_Init(&lk, NULL);
9 RLookup_Cleanup(&lk);
10 }
11
TEST_F(RLookupTest,testFlags)12 TEST_F(RLookupTest, testFlags) {
13 RLookup lk = {0};
14 RLookup_Init(&lk, NULL);
15 RLookupKey *fook = RLookup_GetKey(&lk, "foo", 0);
16 ASSERT_EQ(NULL, fook);
17 // Try with O_CREAT
18 fook = RLookup_GetKey(&lk, "foo", RLOOKUP_F_OCREAT);
19 ASSERT_TRUE(fook);
20
21 RLookupKey *tmpk = RLookup_GetKey(&lk, "foo", RLOOKUP_F_OEXCL);
22 ASSERT_EQ(NULL, tmpk);
23
24 RLookup_Cleanup(&lk);
25 }
26
TEST_F(RLookupTest,testRow)27 TEST_F(RLookupTest, testRow) {
28 RLookup lk = {0};
29 RLookup_Init(&lk, NULL);
30 RLookupKey *fook = RLookup_GetKey(&lk, "foo", RLOOKUP_F_OCREAT);
31 RLookupKey *bark = RLookup_GetKey(&lk, "bar", RLOOKUP_F_OCREAT);
32 RLookupRow rr = {0};
33 RSValue *vfoo = RS_Int64Val(42);
34 RSValue *vbar = RS_Int64Val(666);
35
36 ASSERT_EQ(1, vfoo->refcount);
37 RLookup_WriteKey(fook, &rr, vfoo);
38 ASSERT_EQ(2, vfoo->refcount);
39
40 RSValue *vtmp = RLookup_GetItem(fook, &rr);
41 ASSERT_EQ(vfoo, vtmp);
42 ASSERT_EQ(2, vfoo->refcount);
43 ASSERT_EQ(1, rr.ndyn);
44
45 // Write a NULL value
46 RLookup_WriteKey(fook, &rr, &RS_StaticNull);
47 ASSERT_EQ(1, vfoo->refcount);
48
49 // Get the 'bar' key -- should be NULL
50 ASSERT_TRUE(NULL == RLookup_GetItem(bark, &rr));
51
52 // Clean up the row
53 RLookupRow_Wipe(&rr);
54 vtmp = RLookup_GetItem(fook, &rr);
55 ASSERT_TRUE(NULL == RLookup_GetItem(fook, &rr));
56
57 RSValue_Decref(vfoo);
58 RSValue_Decref(vbar);
59 RLookupRow_Cleanup(&rr);
60 RLookup_Cleanup(&lk);
61 }