This repository has been archived on 2022-05-21. You can view files and clone it, but cannot push or open issues or pull requests.
LEFTONE/core/loworld/test.h
falsycat 84c3a02b9a [RELEASE] u22-v03
This version is submitted to U22 breau.
2020-09-14 00:00:00 +00:00

147 lines
4.4 KiB
C

#pragma once
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <msgpack.h>
#include <msgpack/sbuffer.h>
#include "core/lobullet/base.h"
#include "core/lobullet/bomb.h"
#include "core/lobullet/linear.h"
#include "core/locharacter/base.h"
#include "core/locharacter/big_warder.h"
#include "core/locharacter/cavia.h"
#include "core/locharacter/encephalon.h"
#include "core/locharacter/greedy_scientist.h"
#include "core/locharacter/theists_child.h"
#include "core/locharacter/scientist.h"
#include "core/locharacter/warder.h"
#include "core/locharacter/pool.h"
#include "core/loentity/entity.h"
#include "core/loground/base.h"
#include "core/loground/island.h"
#include "core/loground/pool.h"
#include "./poolset.h"
# define pack_and_unpack_(type, name) do { \
msgpack_sbuffer_clear(buf); \
loentity_pack(&base->super.super, &packer); \
loentity_delete(&base->super.super); \
\
size_t offset = 0; \
const msgpack_unpack_return r = \
msgpack_unpack_next(upk, buf->data, buf->size, &offset); \
if (r != MSGPACK_UNPACK_SUCCESS) { \
fprintf(stderr, #type"_"#name": invalid msgpack format\n"); \
abort(); \
} \
if (!type##_base_unpack(base, &upk->data)) { \
fprintf(stderr, #type"_"#name": failed to unpack\n"); \
abort(); \
} \
loentity_delete(&base->super.super); \
printf(#type"_"#name": pack test passed\n"); \
} while (0)
static inline void loworld_test_packing_grounds(
loground_base_t* base, msgpack_sbuffer* buf, msgpack_unpacked* upk) {
assert(base != NULL);
assert(buf != NULL);
assert(upk != NULL);
msgpack_packer packer;
msgpack_packer_init(&packer, buf, msgpack_sbuffer_write);
loground_island_build(
base, &locommon_position(0, 0, vec2(0, 0)), &vec2(1, 1));
pack_and_unpack_(loground, island);
}
static inline void loworld_test_packing_bullets(
lobullet_base_t* base, msgpack_sbuffer* buf, msgpack_unpacked* upk) {
assert(base != NULL);
assert(buf != NULL);
assert(upk != NULL);
msgpack_packer packer;
msgpack_packer_init(&packer, buf, msgpack_sbuffer_write);
lobullet_bomb_square_build(
base, &((lobullet_bomb_param_t) { .step = 1, }));
pack_and_unpack_(lobullet, bomb);
lobullet_bomb_triangle_build(
base, &((lobullet_bomb_param_t) { .step = 1, }));
pack_and_unpack_(lobullet, bomb);
lobullet_linear_light_build(
base, &((lobullet_linear_param_t) { .duration = 1, }));
pack_and_unpack_(lobullet, linear);
lobullet_linear_triangle_build(
base, &((lobullet_linear_param_t) { .duration = 1, }));
pack_and_unpack_(lobullet, linear);
}
static inline void loworld_test_packing_characters(
locharacter_base_t* base, msgpack_sbuffer* buf, msgpack_unpacked* upk) {
assert(base != NULL);
assert(buf != NULL);
assert(upk != NULL);
msgpack_packer packer;
msgpack_packer_init(&packer, buf, msgpack_sbuffer_write);
locharacter_big_warder_build(base, 0);
pack_and_unpack_(locharacter, big_warder);
locharacter_cavia_build(
base, &((locharacter_cavia_param_t) { .direction = 1, }));
pack_and_unpack_(locharacter, cavia);
locharacter_encephalon_build(base, 0);
pack_and_unpack_(locharacter, encephalon);
locharacter_theists_child_build(base, 0);
pack_and_unpack_(locharacter, theists_child);
locharacter_greedy_scientist_build(base, 0);
pack_and_unpack_(locharacter, greedy_scientist);
locharacter_scientist_build(base, &((locharacter_scientist_param_t) {0}));
pack_and_unpack_(locharacter, scientist);
locharacter_warder_build(base, &((locharacter_warder_param_t) {0}));
pack_and_unpack_(locharacter, warder);
}
# undef pack_and_unpack_
static inline void loworld_test_packing(const loworld_poolset_t* pools) {
assert(pools != NULL);
msgpack_sbuffer buf;
msgpack_sbuffer_init(&buf);
msgpack_unpacked upk;
msgpack_unpacked_init(&upk);
loground_base_t* ground = loground_pool_create(pools->ground);
loworld_test_packing_grounds(ground, &buf, &upk);
loentity_delete(&ground->super.super);
lobullet_base_t* bullet = lobullet_pool_create(pools->bullet);
loworld_test_packing_bullets(bullet, &buf, &upk);
loentity_delete(&bullet->super.super);
locharacter_base_t* chara = locharacter_pool_create(pools->character);
loworld_test_packing_characters(chara, &buf, &upk);
loentity_delete(&chara->super.super);
msgpack_unpacked_destroy(&upk);
msgpack_sbuffer_destroy(&buf);
}