#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);
}