소스 검색

Add quad store test; fix context assignment.

Stefano Cossu 4 년 전
부모
커밋
63388680d1
2개의 변경된 파일50개의 추가작업 그리고 2개의 파일을 삭제
  1. 3 2
      src/store_mdb.c
  2. 47 0
      test/test_store_mdb.c

+ 3 - 2
src/store_mdb.c

@@ -346,9 +346,10 @@ LSUP_store_add(
     // Serialize and hash.
     LSUP_Key ck = NULL_KEY;
 
-    if (store->default_ctx != NULL) {
-        if (sc == NULL) sc = store->default_ctx;
+    // Assign default store context if existing and ctx is NULL.
+    if (store->default_ctx && !sc) sc = store->default_ctx;
 
+    if (sc) {
         ck = LSUP_sterm_to_key(sc);
 
         // Insert t:st for context.

+ 47 - 0
test/test_store_mdb.c

@@ -62,8 +62,55 @@ static int test_triple_store()
 }
 
 
+/** @brief Test quad store.
+ *
+ * Insert the same triple set twice with different contexts.
+ */
 static int test_quad_store()
 {
+    rmdb();
+    EXPECT_PASS(LSUP_store_setup(&path));
+
+    LSUP_MDBStore *store;
+    store = LSUP_store_new(path, NULL); // triple store.
+    ASSERT(store != NULL, "Error initializing store!");
+
+    LSUP_Triple *trp = create_triples();
+    LSUP_SerTerm sterms[NUM_TRP][3];
+    LSUP_SerTriple ser_trp[NUM_TRP];
+
+    for (int i = 0; i < NUM_TRP; i++) {
+        ser_trp[i].s = sterms[i];
+        ser_trp[i].p = sterms[i] + 1;
+        ser_trp[i].o = sterms[i] + 2;
+        for (int j = 0; j < 3; j++) {
+            LSUP_term_serialize(
+                    LSUP_triple_term_by_pos(trp + i, j),
+                    LSUP_ser_triple_term_by_pos(ser_trp + i, j));
+        }
+    }
+
+    LSUP_Term *ctx1 = LSUP_uri_new("urn:c:1");
+    LSUP_SerTerm sc1_s;
+    LSUP_term_serialize(ctx1, &sc1_s);
+
+    EXPECT_PASS(LSUP_store_add(store, &sc1_s, ser_trp, NUM_TRP));
+
+    LSUP_Term *ctx2 = LSUP_uri_new("urn:c:2");
+    LSUP_SerTerm sc2_s;
+    LSUP_term_serialize(ctx2, &sc2_s);
+
+    EXPECT_PASS(LSUP_store_add(store, &sc2_s, ser_trp, NUM_TRP));
+
+    for (int i = 0; i < NUM_TRP; i++) {
+        LSUP_buffer_done(ser_trp[i].s);
+        LSUP_buffer_done(ser_trp[i].p);
+        LSUP_buffer_done(ser_trp[i].o);
+    }
+
+    LSUP_store_free(store);
+    free_triples(trp);
+
     return 0;
 }