Newer
Older
libkc / modules / test / src / test_memory_entry.c
#include <stdio.h>
#include <errno.h>

#include <kc.h>
#include <kc_ut.h>
#include <kc_assert.h>
#include <kc_memory_entry.h>
#include <kc_memory_entry_inner.h>

// プロトタイプ宣言
static void test_memory_entry_new(void);
static void test_memory_entry_new_alignment(void);
static void test_memory_entry_new_realloc(void);
static void test_memory_entry_set_null(void);

/**
 * memory_entry 単体テストスイート
 */
void suite_memory_entry(void)
{
    KcUt *ut = KcUt_get_instance();
    ut->add(ut, UT_TESTCASE, "memory_entry new/delete", test_memory_entry_new);
    ut->add(ut, UT_TESTCASE, "memory_entry new (alignment)", test_memory_entry_new_alignment);
    ut->add(ut, UT_TESTCASE, "memory_entry new (realloc)", test_memory_entry_new_realloc);
    ut->add(ut, UT_TESTCASE, "memory_entry set (NULL Entry)", test_memory_entry_set_null);
}

/**
 * memory_entry 生成/破棄
 *
 * @process KcMemoryEntry_new を用いて KcMemoryEntry を生成する。
 * @result  KcMemoryEntry が生成されること。各値が指定された値に設定されていること。
 */
static void test_memory_entry_new(void)
{
    KcMemoryEntry *entry = KcMemoryEntry_new(
        NULL, 0, 10, KC_MEMORY_ALLOCATED, "test_file", "test_func", 34);
    assert_not_null(entry);
    assert_equals(KC_MEMORY_ALLOCATED, entry->mark);
    assert_equals(10, entry->size);
    assert_equals("test_file", entry->file);
    assert_equals("test_func", entry->func);
    assert_equals(34, entry->line);

    KcMemoryEntry_delete(entry);
    // entry->mark には、KC_MEMORY_DELETED を格納してから破棄されているが、
    // free 後のメモリ領域は、確認不可。
}

/**
 * memory_entry 生成 (alignment指定)
 *
 * @process alignment を指定して KcMemoryEntry を生成する。
 * @result  KcMemoryEntry が生成されること。各値が指定された値に設定されていること。
 */
static void test_memory_entry_new_alignment(void)
{
    KcMemoryEntry *entry = KcMemoryEntry_new(
        NULL, sizeof(int), 10, KC_MEMORY_ALLOCATED, "test_file", "test_func", 34);
    assert_not_null(entry);
    assert_equals(KC_MEMORY_ALLOCATED, entry->mark);
    assert_equals(10, entry->size);
    assert_equals("test_file", entry->file);
    assert_equals("test_func", entry->func);
    assert_equals(34, entry->line);
    KcMemoryEntry_delete(entry);
}

/**
 * memory_entry 生成 (entry 指定)
 *
 * @process entry を指定して KcMemoryEntry を生成する。
 * @result  KcMemoryEntry が生成されること。各値が指定された値に更新されていること。
 */
static void test_memory_entry_new_realloc(void)
{
    KcMemoryEntry *entry = KcMemoryEntry_new(
        NULL, sizeof(int), 10, KC_MEMORY_ALLOCATED, "test_file", "test_func", 34);
    KcMemoryEntry *new_entry = KcMemoryEntry_new(
        entry, 0, 250, KC_MEMORY_ALLOCATED, "test_file2", "test_func2", 123);
    assert_not_null(new_entry);
    assert_equals(KC_MEMORY_ALLOCATED, new_entry->mark);
    assert_equals(250, new_entry->size);
    assert_equals("test_file2", new_entry->file);
    assert_equals("test_func2", new_entry->func);
    assert_equals(123, new_entry->line);

    KcMemoryEntry_delete(new_entry);
}

/**
 * memory_entry 設定
 *
 * @process NULL を指定して、KcMemoryEntry_set を用いて各値を設定する。
 * @result  エントリが NULL のため、何も処理されないこと。
 */
static void test_memory_entry_set_null(void)
{
    KcMemoryEntry_set(
        NULL, 10, KC_MEMORY_ALLOCATED, "test_file", "test_func", 123);
}