keys.cpp
来自「About: hamsterdb is a database engine w」· C++ 代码 · 共 120 行
CPP
120 行
/** * Copyright (C) 2005-2007 Christoph Rupp (chris@crupp.de). * All rights reserved. See file LICENSE for licence and copyright * information. * * unit tests for cache.h/cache.c * */#include <stdexcept>#include <cppunit/extensions/HelperMacros.h>#include <ham/hamsterdb.h>#include "../src/db.h"#include "../src/btree.h"#include "../src/keys.h"#include "memtracker.h"class KeyTest : public CppUnit::TestFixture{ CPPUNIT_TEST_SUITE(KeyTest); CPPUNIT_TEST (structureTest); CPPUNIT_TEST (extendedRidTest); CPPUNIT_TEST (endianTest); 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 structureTest(void) { ham_page_t *page=page_new(m_db); CPPUNIT_ASSERT(page!=0); CPPUNIT_ASSERT_EQUAL(0, page_alloc(page, db_get_pagesize(m_db))); btree_node_t *node=ham_page_get_btree_node(page); ::memset(node, 0, db_get_usable_pagesize(m_db)); int_key_t *key=btree_node_get_key(m_db, node, 0); CPPUNIT_ASSERT_EQUAL((ham_offset_t)0, key_get_ptr(key)); CPPUNIT_ASSERT_EQUAL((ham_u8_t)0, key_get_flags(key)); CPPUNIT_ASSERT_EQUAL((ham_u8_t)'\0', *key_get_key(key)); key_set_ptr(key, (ham_offset_t)0x12345); CPPUNIT_ASSERT_EQUAL((ham_offset_t)0x12345, key_get_ptr(key)); key_set_flags(key, (ham_u8_t)0x13); CPPUNIT_ASSERT_EQUAL((ham_u8_t)0x13, key_get_flags(key)); ::strcpy((char *)key_get_key(key), "abc"); CPPUNIT_ASSERT_EQUAL(0, ::strcmp((char *)key_get_key(key), "abc")); CPPUNIT_ASSERT_EQUAL(0, page_free(page)); page_delete(page); } void extendedRidTest(void) { ham_page_t *page=page_new(m_db); CPPUNIT_ASSERT(page!=0); CPPUNIT_ASSERT_EQUAL(0, page_alloc(page, db_get_pagesize(m_db))); btree_node_t *node=ham_page_get_btree_node(page); ::memset(node, 0, db_get_usable_pagesize(m_db)); ham_offset_t blobid; int_key_t *key=btree_node_get_key(m_db, node, 0); blobid=key_get_extended_rid(m_db, key); CPPUNIT_ASSERT_EQUAL((ham_offset_t)0, blobid); key_set_extended_rid(m_db, key, (ham_offset_t)0xbaadbeef); blobid=key_get_extended_rid(m_db, key); CPPUNIT_ASSERT_EQUAL((ham_offset_t)0xbaadbeef, blobid); CPPUNIT_ASSERT_EQUAL(0, page_free(page)); page_delete(page); } void endianTest(void) { ham_u8_t buffer[64]={ 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; int_key_t *key=(int_key_t *)&buffer[0]; CPPUNIT_ASSERT_EQUAL((ham_offset_t)0x0123456789abcdefull, key_get_ptr(key)); CPPUNIT_ASSERT_EQUAL((ham_u8_t)0xf0, key_get_flags(key)); CPPUNIT_ASSERT_EQUAL((ham_offset_t)0xfedcba9876543210ull, key_get_extended_rid(m_db, key)); }};CPPUNIT_TEST_SUITE_REGISTRATION(KeyTest);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?