⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hamsterdb.cpp

📁 About: hamsterdb is a database engine written in ANSI C. It supports a B+Tree index structure, uses
💻 CPP
字号:
/** * Copyright (C) 2005-2007 Christoph Rupp (chris@crupp.de). * All rights reserved. See file LICENSE for licence and copyright * information. * * unit tests for hamsterdb.h/hamsterdb.c * */#include <stdexcept>#include <cppunit/extensions/HelperMacros.h>#include <ham/hamsterdb.h>#include "memtracker.h"#include "../src/db.h"#include "../src/version.h"class HamsterdbTest : public CppUnit::TestFixture{    CPPUNIT_TEST_SUITE(HamsterdbTest);    CPPUNIT_TEST      (versionTest);    CPPUNIT_TEST      (newTest);    CPPUNIT_TEST      (deleteTest);    CPPUNIT_TEST      (openTest);    CPPUNIT_TEST      (createTest);    CPPUNIT_TEST      (getErrorTest);    CPPUNIT_TEST      (setPrefixCompareTest);    CPPUNIT_TEST      (setCompareTest);    CPPUNIT_TEST      (findTest);    CPPUNIT_TEST      (insertTest);    CPPUNIT_TEST      (eraseTest);    CPPUNIT_TEST      (flushTest);    CPPUNIT_TEST      (closeTest);    CPPUNIT_TEST      (cursorCreateTest);    CPPUNIT_TEST      (cursorCloneTest);    CPPUNIT_TEST      (cursorMoveTest);    CPPUNIT_TEST      (cursorReplaceTest);    CPPUNIT_TEST      (cursorFindTest);    CPPUNIT_TEST      (cursorInsertTest);    CPPUNIT_TEST      (cursorEraseTest);    CPPUNIT_TEST      (cursorCloseTest);    CPPUNIT_TEST_SUITE_END();protected:    ham_db_t *m_db;    memtracker_t *m_alloc;public:    void setUp()    {         CPPUNIT_ASSERT((m_alloc=memtracker_new())!=0);        CPPUNIT_ASSERT_EQUAL(0, ham_new(&m_db));        db_set_allocator(m_db, (mem_allocator_t *)m_alloc);        CPPUNIT_ASSERT_EQUAL(0, ham_create(m_db, 0, HAM_IN_MEMORY_DB, 0));    }        void tearDown()     {         ham_close(m_db);        ham_delete(m_db);        CPPUNIT_ASSERT(!memtracker_get_leaks(m_alloc));    }    void versionTest(void)    {        ham_u32_t major, minor, revision;        ham_get_version(&major, &minor, &revision);        CPPUNIT_ASSERT_EQUAL((ham_u32_t)HAM_VERSION_MAJ, major);        CPPUNIT_ASSERT_EQUAL((ham_u32_t)HAM_VERSION_MIN, minor);        CPPUNIT_ASSERT_EQUAL((ham_u32_t)HAM_VERSION_REV, revision);    };    void newTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER, ham_new(0));    }    void deleteTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER, ham_delete(0));    }    void openTest(void)    {        ham_db_t *db;        CPPUNIT_ASSERT_EQUAL(0, ham_new(&db));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_open(0, "test.db", 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_open(db, 0, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_open(db, 0, HAM_IN_MEMORY_DB));        CPPUNIT_ASSERT_EQUAL(HAM_FILE_NOT_FOUND,                 ham_open(db, "xxxx...", 0));#if WIN32        CPPUNIT_ASSERT_EQUAL(HAM_IO_ERROR,                 ham_open(db, "c:\\windows", 0));#else        CPPUNIT_ASSERT_EQUAL(HAM_IO_ERROR,                 ham_open(db, "/usr", 0));#endif        ham_delete(db);    }    void createTest(void)    {        ham_db_t *db;        ham_parameter_t cs[]={{HAM_PARAM_CACHESIZE, 1024}, {0, 0}};        ham_parameter_t ps[]={{HAM_PARAM_PAGESIZE,   512}, {0, 0}};        CPPUNIT_ASSERT_EQUAL(0, ham_new(&db));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_create(0, "test.db", 0, 0664));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_create(db, 0, 0, 0664));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_create(db, 0, HAM_IN_MEMORY_DB|HAM_CACHE_STRICT, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_create_ex(db, 0, HAM_IN_MEMORY_DB, 0, &cs[0]));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PAGESIZE,                 ham_create_ex(db, ".test", 0, 0, &ps[0]));#if WIN32        CPPUNIT_ASSERT_EQUAL(HAM_IO_ERROR,                 ham_create(db, "c:\\windows", 0, 0664));#else        CPPUNIT_ASSERT_EQUAL(HAM_IO_ERROR,                 ham_create(db, "/home", 0, 0664));#endif        ham_delete(db);    }    void getErrorTest(void)    {        CPPUNIT_ASSERT_EQUAL(0, ham_get_error(0));    }    void setPrefixCompareTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_set_prefix_compare_func(0, 0));    }    void setCompareTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                ham_set_compare_func(0, 0));    }    void findTest(void)    {        ham_key_t key;        ham_record_t rec;        ::memset(&key, 0, sizeof(key));        ::memset(&rec, 0, sizeof(rec));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_find(0, 0, &key, &rec, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_find(m_db, 0, 0, &rec, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_find(m_db, 0, &key, 0, 0));        CPPUNIT_ASSERT_EQUAL(HAM_KEY_NOT_FOUND,                 ham_find(m_db, 0, &key, &rec, 0));    }    void insertTest(void)    {        ham_key_t key;        ham_record_t rec;        ::memset(&key, 0, sizeof(key));        ::memset(&rec, 0, sizeof(rec));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_insert(0, 0, &key, &rec, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_insert(m_db, 0, 0, &rec, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_insert(m_db, 0, &key, 0, 0));        CPPUNIT_ASSERT_EQUAL(0,                 ham_insert(m_db, 0, &key, &rec, 0));    }    void eraseTest(void)    {        ham_key_t key;        ham_record_t rec;        ::memset(&key, 0, sizeof(key));        ::memset(&rec, 0, sizeof(rec));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_erase(0, 0, &key, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_erase(m_db, 0, 0, 0));        CPPUNIT_ASSERT_EQUAL(HAM_KEY_NOT_FOUND,                 ham_erase(m_db, 0, &key, 0));    }    void flushTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_flush(0, 0));    }    void closeTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER, ham_close(0));    }    void cursorCreateTest(void)    {        ham_cursor_t *cursor;        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_create(0, 0, 0, &cursor));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_create(m_db, 0, 0, 0));    }    void cursorCloneTest(void)    {        ham_cursor_t src, *dest;        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_clone(0, &dest));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_clone(&src, 0));    }    void cursorMoveTest(void)    {        ham_cursor_t *cursor;        ham_key_t key;        ::memset(&key, 0, sizeof(key));        CPPUNIT_ASSERT_EQUAL(0, ham_cursor_create(m_db, 0, 0, &cursor));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_move(0, 0, 0, 0));        CPPUNIT_ASSERT_EQUAL(HAM_CURSOR_IS_NIL,                 ham_cursor_move(cursor, &key, 0, 0));        CPPUNIT_ASSERT_EQUAL(HAM_KEY_NOT_FOUND,                 ham_cursor_move(cursor, &key, 0, HAM_CURSOR_FIRST));        CPPUNIT_ASSERT_EQUAL(HAM_KEY_NOT_FOUND,                 ham_cursor_move(cursor, &key, 0, HAM_CURSOR_LAST));        CPPUNIT_ASSERT_EQUAL(HAM_KEY_NOT_FOUND,                 ham_cursor_move(cursor, &key, 0, HAM_CURSOR_NEXT));        CPPUNIT_ASSERT_EQUAL(HAM_KEY_NOT_FOUND,                 ham_cursor_move(cursor, &key, 0, HAM_CURSOR_PREVIOUS));        ham_cursor_close(cursor);    }    void cursorReplaceTest(void)    {        ham_cursor_t cursor;        ham_record_t *record=0;        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_replace(0, record, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_replace(&cursor, 0, 0));    }    void cursorFindTest(void)    {        ham_cursor_t cursor;        ham_key_t *key=0;        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_find(0, key, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_find(&cursor, 0, 0));    }    void cursorInsertTest(void)    {        ham_cursor_t cursor;        ham_key_t key;        ham_record_t rec;        ::memset(&key, 0, sizeof(key));        ::memset(&rec, 0, sizeof(rec));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_insert(0, &key, &rec, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_insert(&cursor, 0, &rec, 0));        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_insert(&cursor, &key, 0, 0));    }    void cursorEraseTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_erase(0, 0));    }    void cursorCloseTest(void)    {        CPPUNIT_ASSERT_EQUAL(HAM_INV_PARAMETER,                 ham_cursor_close(0));    }};CPPUNIT_TEST_SUITE_REGISTRATION(HamsterdbTest);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -