int main(void) { bool eql; bool str_eql(const char ar1[], const char ar2[]); const char arr1[] = "Test "; const char arr2[] = "works."; eql = str_eql(arr1,arr2); if(eql == true ) printf(" The arrays arr1 and arr2 is equal \n"); else printf(" The arrays arr1 and arr2 is not equal \n"); eql = str_eql(arr2,arr2); if(eql == true ) printf(" The arrays arr2 and arr2 is equal \n"); else printf(" The arrays arr2 and arr2 is not equal \n"); eql = str_eql(arr1,"Test "); if(eql == true ) printf(" The arrays arr1 and \"Test\" is equal \n"); else printf(" The arrays arr1 and \"Test\" is not equal \n"); }
static char * test_init_db() { person a_person; GumpDB db = gmp_init_DB("people.db", 100); mu_assert("file name", str_eql(db->file_name, "people.db")); mu_assert("size of data", db->size_of_data == 100); return 0; }
static char * test_modify() { create_file("people_test"); /* Initialize DB */ GumpDB db = gmp_init_DB("people_test", sizeof(person)); person john; strcpy(john.first_name, "John"); strcpy(john.last_name, "Doe"); john.age = 20; int id; gmp_store(db, &id, &john); gmp_modify(db, id, &modifyPerson); person retrieved; bool result = gmp_retrieve(db, id, &retrieved); mu_assert("retrieve result", result); mu_assert("first person name", str_eql(retrieved.first_name, "john")); mu_assert("first person last name", str_eql(retrieved.last_name, "Doe")); mu_assert("first person age", retrieved.age == 40); return 0; }
size_t Data::idx(const std::string& key, size_t keyCount, bool required) const { if(key.empty()) return curIdx(required); if(0 == keyCount && !end() && str_eql(key, m_keys[m_pos])) return m_pos; if(keyCount < m_keyIdx.size()) { KeyIdx ki(key, 0); KeyIdxVec::const_iterator it = std::lower_bound(m_keyIdx.begin(), m_keyIdx.end(), ki, key_less); size_t keyIdxPos = std::distance(m_keyIdx.begin(), it) + keyCount; if(keyIdxPos < m_keyIdx.size() && key_eql(ki, m_keyIdx[keyIdxPos])) return m_keyIdx[keyIdxPos].second; } if(required) throw std::exception("sl::Data::idx - key not found"); return IdxInvalidPos; }
static char * test_retrieve() { create_file("people_test"); /* Initialize DB */ GumpDB db = gmp_init_DB("people_test", sizeof(person)); /* Let's create three different records and store them in our DB*/ person john; strcpy(john.first_name, "John"); strcpy(john.last_name, "Doe"); john.age = 39; person jane; strcpy(jane.first_name, "Jane"); strcpy(jane.last_name, "Black"); jane.age = 41; person paul; strcpy(paul.first_name, "Paul"); strcpy(paul.last_name, "McGregor"); paul.age = 40; gmp_store(db, NULL, &john); /* id = 0 */ gmp_store(db, NULL, &jane); /* id = 1 */ gmp_store(db, NULL, &paul); /* id = 2 */ /* Now let's fetch them by id */ person retrieved; bool result = gmp_retrieve(db, 0, &retrieved); mu_assert("retrieve result", result); mu_assert("first person name", str_eql(retrieved.first_name, "John")); mu_assert("first person last name", str_eql(retrieved.last_name, "Doe")); mu_assert("first person age", retrieved.age == 39); /* Skip to the last record */ result = gmp_retrieve(db, 2, &retrieved); mu_assert("retrieve result", result); mu_assert("last person name", str_eql(retrieved.first_name, "Paul")); mu_assert("last person last name", str_eql(retrieved.last_name, "McGregor")); mu_assert("last person age", retrieved.age == 40); /* And back to the second record */ result = gmp_retrieve(db, 1, &retrieved); mu_assert("retrieve result", result); mu_assert("second person name", str_eql(retrieved.first_name, "Jane")); mu_assert("second person last name", str_eql(retrieved.last_name, "Black")); mu_assert("second person age", retrieved.age == 41); return 0; }
static char * test_delete() { create_file("people_test"); /* Initialize DB */ GumpDB db = gmp_init_DB("people_test", sizeof(person)); person john; strcpy(john.first_name, "John"); gmp_store(db, NULL, &john); /* Let's make sure we can fetch it id */ person retrieved; bool result = gmp_retrieve(db, 0, &retrieved); mu_assert("retrieve result", result); mu_assert("first person name", str_eql(retrieved.first_name, "John")); /* Now we delete the record in the DB */ result = gmp_delete(db, 0); mu_assert("delete record with id = 0", result); /* We shouldn't be able to retrieve the result now */ person not_retrieved; result = gmp_retrieve(db, 0, ¬_retrieved); mu_assert("don't retrieve result", !result); /* We shouldn't be able to delete a deleted record */ result = gmp_delete(db, 0); mu_assert("don't delete record with id = 0", !result); /* Neither a non existent record */ result = gmp_delete(db, 1); mu_assert("don't delete record with id = 1", !result); return 0; }
static char * test_list() { create_file("people_test"); /* Initialize DB */ GumpDB db = gmp_init_DB("people_test", sizeof(person)); /* Let's create three different records and store them in our DB*/ person john; strcpy(john.first_name, "John"); strcpy(john.last_name, "Doe"); john.age = 39; person jane; strcpy(jane.first_name, "Jane"); strcpy(jane.last_name, "Black"); jane.age = 41; person paul; strcpy(paul.first_name, "Paul"); strcpy(paul.last_name, "McGregor"); paul.age = 40; gmp_store(db, NULL, &john); gmp_store(db, NULL, &jane); gmp_store(db, NULL, &paul); int count; bool result; GumpDBRecord ** list; result = gmp_list(db, &list, &count); mu_assert("retrieve result", result); mu_assert("count == 3", count == 3); /* This is how it would look like to fetch each an attribute */ mu_assert("first person name", str_eql(((person *) (list[0]->record))->first_name, "John")); /* Lucky to us, we have defined the get(id, attr) macro */ mu_assert("first person last name", str_eql(get(0, last_name), "Doe")); mu_assert("first person age", get(0, age) == 39); mu_assert("first person id == 0", list[0]->id == 0); /* Skip to the last record (third) */ mu_assert("last person name", str_eql(get(2, first_name), "Paul")); mu_assert("last person last name", str_eql(get(2, last_name), "McGregor")); mu_assert("last person age", get(2, age) == 40); mu_assert("first person id == 2", list[2]->id == 2); /* And back to the second record */ mu_assert("second person name", str_eql(get(1, first_name), "Jane")); mu_assert("second person last name", str_eql(get(1, last_name), "Black")); mu_assert("second person age", get(1, age) == 41); mu_assert("first person id == 1", list[1]->id == 1); /* So far, so good. But what happens when we delete a record? */ result = gmp_delete(db, 1); mu_assert("delete record with id = 1", result); result = gmp_list(db, &list, &count); mu_assert("retrieve result", result); mu_assert("count == 2", count == 2); mu_assert("first person name", str_eql(get(0, first_name), "John")); mu_assert("first person last name", str_eql(get(0, last_name), "Doe")); mu_assert("first person age", get(0, age) == 39); mu_assert("first person id == 0", list[0]->id == 0); /* Now the last record, list[1], has id = 2 */ mu_assert("first person id == 2", list[1]->id == 2); mu_assert("last person name", str_eql(get(1, first_name), "Paul")); mu_assert("last person last name", str_eql(get(1, last_name), "McGregor")); mu_assert("last person age", get(1, age) == 40); return 0; }