|
@@ -113,7 +113,7 @@ static int test_quad_store()
|
|
LSUP_term_serialize(ctx1, &sc1_s);
|
|
LSUP_term_serialize(ctx1, &sc1_s);
|
|
|
|
|
|
LSUP_MDBStore *store;
|
|
LSUP_MDBStore *store;
|
|
- store = LSUP_store_new(path, &sc1_s); // triple store.
|
|
|
|
|
|
+ store = LSUP_store_new(path, &sc1_s); // quad store.
|
|
ASSERT(store != NULL, "Error initializing store!");
|
|
ASSERT(store != NULL, "Error initializing store!");
|
|
|
|
|
|
LSUP_Triple *trp = create_triples();
|
|
LSUP_Triple *trp = create_triples();
|
|
@@ -131,17 +131,113 @@ static int test_quad_store()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- // Use store default context.
|
|
|
|
- EXPECT_PASS(LSUP_store_add(store, NULL, ser_trp, NUM_TRP));
|
|
|
|
|
|
+ // Only triples 0÷5 in default context.
|
|
|
|
+ EXPECT_PASS(LSUP_store_add(store, NULL, ser_trp, 6));
|
|
|
|
|
|
LSUP_Term *ctx2 = LSUP_uri_new("urn:c:2");
|
|
LSUP_Term *ctx2 = LSUP_uri_new("urn:c:2");
|
|
LSUP_SerTerm sc2_s;
|
|
LSUP_SerTerm sc2_s;
|
|
LSUP_term_serialize(ctx2, &sc2_s);
|
|
LSUP_term_serialize(ctx2, &sc2_s);
|
|
|
|
|
|
- // Use specific context.
|
|
|
|
- EXPECT_PASS(LSUP_store_add(store, &sc2_s, ser_trp, NUM_TRP));
|
|
|
|
|
|
+ // Only triples 4÷9 in default context.
|
|
|
|
+ EXPECT_PASS(LSUP_store_add(store, &sc2_s, ser_trp + 4, 6));
|
|
|
|
+
|
|
|
|
+ // 6 triples in ctx1 + 6 in ctx2 - 2 duplicates
|
|
|
|
+ EXPECT_INT_EQ(LSUP_store_size(store), 10);
|
|
|
|
+
|
|
|
|
+ // Test lookups.
|
|
|
|
+ // This context is not with any triple.
|
|
|
|
+ LSUP_Term *ctx3 = LSUP_uri_new("urn:c:3");
|
|
|
|
+ LSUP_SerTerm sc3_s;
|
|
|
|
+ LSUP_term_serialize(ctx2, &sc3_s);
|
|
|
|
+
|
|
|
|
+ size_t ct;
|
|
|
|
+ LSUP_SerTerm *lut[12][4] = {
|
|
|
|
+ // No context
|
|
|
|
+ {NULL, NULL, NULL, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[0].s, NULL, NULL, NULL},
|
|
|
|
+ {ser_trp[2].s, NULL, NULL, ser_trp[2].s},
|
|
|
|
+ {NULL, ser_trp[0].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[0].s, NULL, NULL},
|
|
|
|
+ {NULL, NULL, ser_trp[6].o, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[7].p, ser_trp[7].o, NULL},
|
|
|
|
+ {ser_trp[5].s, NULL, ser_trp[5].o, NULL},
|
|
|
|
+ {ser_trp[6].s, NULL, ser_trp[5].o, ser_trp[2].s},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[4].o, NULL},
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[5].o, NULL},
|
|
|
|
+
|
|
|
|
+ // Context 1
|
|
|
|
+ {NULL, NULL, NULL, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[0].s, NULL, NULL, NULL},
|
|
|
|
+ {ser_trp[2].s, NULL, NULL, ser_trp[2].s},
|
|
|
|
+ {NULL, ser_trp[0].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[0].s, NULL, NULL},
|
|
|
|
+ {NULL, NULL, ser_trp[6].o, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[7].p, ser_trp[7].o, NULL},
|
|
|
|
+ {ser_trp[5].s, NULL, ser_trp[5].o, NULL},
|
|
|
|
+ {ser_trp[6].s, NULL, ser_trp[5].o, ser_trp[2].s},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[4].o, NULL},
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[5].o, NULL},
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // Context 2
|
|
|
|
+ {NULL, NULL, NULL, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[0].s, NULL, NULL, NULL},
|
|
|
|
+ {ser_trp[2].s, NULL, NULL, ser_trp[2].s},
|
|
|
|
+ {NULL, ser_trp[0].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[0].s, NULL, NULL},
|
|
|
|
+ {NULL, NULL, ser_trp[6].o, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[7].p, ser_trp[7].o, NULL},
|
|
|
|
+ {ser_trp[5].s, NULL, ser_trp[5].o, NULL},
|
|
|
|
+ {ser_trp[6].s, NULL, ser_trp[5].o, ser_trp[2].s},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[4].o, NULL},
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[5].o, NULL},
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // Non-existing context
|
|
|
|
+ {NULL, NULL, NULL, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[0].s, NULL, NULL, NULL},
|
|
|
|
+ {ser_trp[2].s, NULL, NULL, ser_trp[2].s},
|
|
|
|
+ {NULL, ser_trp[0].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[0].s, NULL, NULL},
|
|
|
|
+ {NULL, NULL, ser_trp[6].o, NULL},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, NULL, NULL},
|
|
|
|
+ {NULL, ser_trp[7].p, ser_trp[7].o, NULL},
|
|
|
|
+ {ser_trp[5].s, NULL, ser_trp[5].o, NULL},
|
|
|
|
+ {ser_trp[6].s, NULL, ser_trp[5].o, ser_trp[2].s},
|
|
|
|
+
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[4].o, NULL},
|
|
|
|
+ {ser_trp[4].s, ser_trp[4].p, ser_trp[5].o, NULL},
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ size_t results[12] = {
|
|
|
|
+ 8,
|
|
|
|
+ 5, 1, 1, 0, 1,
|
|
|
|
+ 2, 1, 2, 0,
|
|
|
|
+ 1, 0,
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ for (int i = 0; i < 8; i++) {
|
|
|
|
+ TRACE("Testing triple lookup #%d.\n", i);
|
|
|
|
+ int rc = LSUP_store_lookup(store, lut[i], &ct, NULL, NULL);
|
|
|
|
+ if (ct > 0) EXPECT_INT_EQ(rc, LSUP_OK);
|
|
|
|
+ else if (ct == 0) EXPECT_INT_EQ(rc, LSUP_NORESULT);
|
|
|
|
|
|
- EXPECT_INT_EQ(LSUP_store_size(store), 16);
|
|
|
|
|
|
+ EXPECT_INT_EQ(ct, results[i]);
|
|
|
|
+ }
|
|
|
|
|
|
for (int i = 0; i < NUM_TRP; i++) {
|
|
for (int i = 0; i < NUM_TRP; i++) {
|
|
LSUP_buffer_done(ser_trp[i].s);
|
|
LSUP_buffer_done(ser_trp[i].s);
|