/* THIS FILE IS AUTOMATICALLY GENERATED BY EXOTIC - DO NOT EDIT THIS FILE! */
/* exotic/0.4 (Mon Nov  7 11:15:31 CET 2011) */

#define __EXOTIC__STANDALONE__

/*
 * Exotic (EXtatic.Org Test InfrastuCture)
 * Copyright (c) 2007, Jan Vidar Krey
 */

#ifndef EXO_TEST
#define EXO_TEST(NAME, block) int exotic_test_ ## NAME (void) block
#endif

#ifndef HAVE_EXOTIC_AUTOTEST_H
#define HAVE_EXOTIC_AUTOTEST_H

#ifdef __cplusplus
extern "C" {
#endif

typedef int(*exo_test_t)();

enum exo_toggle { cfg_default, cfg_off, cfg_on };

struct exotic_handle
{
	enum exo_toggle config_show_summary;
	enum exo_toggle config_show_pass;
	enum exo_toggle config_show_fail;
	unsigned int fail;
	unsigned int pass;
	struct exo_test_data* first;
	struct exo_test_data* current;
};

extern int  exotic_initialize(struct exotic_handle* handle, int argc, char** argv);
extern void exotic_add_test(struct exotic_handle* handle, exo_test_t, const char* name);
extern int  exotic_run(struct exotic_handle* handle);

#ifdef __cplusplus
}
#endif

#endif /* HAVE_EXOTIC_AUTOTEST_H */

#include "test_commands.tcc"
#include "test_credentials.tcc"
#include "test_eventqueue.tcc"
#include "test_hub.tcc"
#include "test_inf.tcc"
#include "test_ipfilter.tcc"
#include "test_list.tcc"
#include "test_memory.tcc"
#include "test_message.tcc"
#include "test_misc.tcc"
#include "test_rbtree.tcc"
#include "test_sid.tcc"
#include "test_tiger.tcc"
#include "test_timer.tcc"
#include "test_tokenizer.tcc"
#include "test_usermanager.tcc"

int main(int argc, char** argv)
{
	struct exotic_handle handle;

	if (exotic_initialize(&handle, argc, argv) == -1)
		return -1;

	/* Register the tests to be run */
	exotic_add_test(&handle, &exotic_test_setup, "setup");
	exotic_add_test(&handle, &exotic_test_command_setup_user, "command_setup_user");
	exotic_add_test(&handle, &exotic_test_command_create, "command_create");
	exotic_add_test(&handle, &exotic_test_command_access_1, "command_access_1");
	exotic_add_test(&handle, &exotic_test_command_access_2, "command_access_2");
	exotic_add_test(&handle, &exotic_test_command_access_3, "command_access_3");
	exotic_add_test(&handle, &exotic_test_command_syntax_1, "command_syntax_1");
	exotic_add_test(&handle, &exotic_test_command_syntax_2, "command_syntax_2");
	exotic_add_test(&handle, &exotic_test_command_missing_args_1, "command_missing_args_1");
	exotic_add_test(&handle, &exotic_test_command_missing_args_2, "command_missing_args_2");
	exotic_add_test(&handle, &exotic_test_command_missing_args_3, "command_missing_args_3");
	exotic_add_test(&handle, &exotic_test_command_number_1, "command_number_1");
	exotic_add_test(&handle, &exotic_test_command_number_2, "command_number_2");
	exotic_add_test(&handle, &exotic_test_command_number_3, "command_number_3");
	exotic_add_test(&handle, &exotic_test_command_user_1, "command_user_1");
	exotic_add_test(&handle, &exotic_test_command_user_2, "command_user_2");
	exotic_add_test(&handle, &exotic_test_command_user_3, "command_user_3");
	exotic_add_test(&handle, &exotic_test_command_user_4, "command_user_4");
	exotic_add_test(&handle, &exotic_test_command_user_5, "command_user_5");
	exotic_add_test(&handle, &exotic_test_command_command_1, "command_command_1");
	exotic_add_test(&handle, &exotic_test_command_command_2, "command_command_2");
	exotic_add_test(&handle, &exotic_test_command_command_3, "command_command_3");
	exotic_add_test(&handle, &exotic_test_command_command_4, "command_command_4");
	exotic_add_test(&handle, &exotic_test_command_command_5, "command_command_5");
	exotic_add_test(&handle, &exotic_test_command_command_6, "command_command_6");
	exotic_add_test(&handle, &exotic_test_command_command_7, "command_command_7");
	exotic_add_test(&handle, &exotic_test_command_command_8, "command_command_8");
	exotic_add_test(&handle, &exotic_test_command_cred_1, "command_cred_1");
	exotic_add_test(&handle, &exotic_test_command_cred_2, "command_cred_2");
	exotic_add_test(&handle, &exotic_test_command_cred_3, "command_cred_3");
	exotic_add_test(&handle, &exotic_test_command_cred_4, "command_cred_4");
	exotic_add_test(&handle, &exotic_test_command_cred_5, "command_cred_5");
	exotic_add_test(&handle, &exotic_test_command_cred_6, "command_cred_6");
	exotic_add_test(&handle, &exotic_test_command_cred_7, "command_cred_7");
	exotic_add_test(&handle, &exotic_test_command_cred_8, "command_cred_8");
	exotic_add_test(&handle, &exotic_test_command_parse_3, "command_parse_3");
	exotic_add_test(&handle, &exotic_test_command_parse_4, "command_parse_4");
	exotic_add_test(&handle, &exotic_test_command_argument_integer_1, "command_argument_integer_1");
	exotic_add_test(&handle, &exotic_test_command_argument_integer_2, "command_argument_integer_2");
	exotic_add_test(&handle, &exotic_test_command_argument_integer_3, "command_argument_integer_3");
	exotic_add_test(&handle, &exotic_test_command_argument_user_1, "command_argument_user_1");
	exotic_add_test(&handle, &exotic_test_command_argument_cid_1, "command_argument_cid_1");
	exotic_add_test(&handle, &exotic_test_command_argument_cred_1, "command_argument_cred_1");
	exotic_add_test(&handle, &exotic_test_command_argument_cred_2, "command_argument_cred_2");
	exotic_add_test(&handle, &exotic_test_command_argument_cred_3, "command_argument_cred_3");
	exotic_add_test(&handle, &exotic_test_command_argument_cred_4, "command_argument_cred_4");
	exotic_add_test(&handle, &exotic_test_command_argument_cred_5, "command_argument_cred_5");
	exotic_add_test(&handle, &exotic_test_command_argument_cred_6, "command_argument_cred_6");
	exotic_add_test(&handle, &exotic_test_command_user_destroy, "command_user_destroy");
	exotic_add_test(&handle, &exotic_test_command_destroy, "command_destroy");
	exotic_add_test(&handle, &exotic_test_cleanup, "cleanup");
	exotic_add_test(&handle, &exotic_test_cred_to_string_1, "cred_to_string_1");
	exotic_add_test(&handle, &exotic_test_cred_to_string_2, "cred_to_string_2");
	exotic_add_test(&handle, &exotic_test_cred_to_string_3, "cred_to_string_3");
	exotic_add_test(&handle, &exotic_test_cred_to_string_4, "cred_to_string_4");
	exotic_add_test(&handle, &exotic_test_cred_to_string_5, "cred_to_string_5");
	exotic_add_test(&handle, &exotic_test_cred_to_string_6, "cred_to_string_6");
	exotic_add_test(&handle, &exotic_test_cred_to_string_7, "cred_to_string_7");
	exotic_add_test(&handle, &exotic_test_cred_to_string_8, "cred_to_string_8");
	exotic_add_test(&handle, &exotic_test_cred_from_string_1, "cred_from_string_1");
	exotic_add_test(&handle, &exotic_test_cred_from_string_2, "cred_from_string_2");
	exotic_add_test(&handle, &exotic_test_cred_from_string_3, "cred_from_string_3");
	exotic_add_test(&handle, &exotic_test_cred_from_string_4, "cred_from_string_4");
	exotic_add_test(&handle, &exotic_test_cred_from_string_5, "cred_from_string_5");
	exotic_add_test(&handle, &exotic_test_cred_from_string_6, "cred_from_string_6");
	exotic_add_test(&handle, &exotic_test_cred_from_string_7, "cred_from_string_7");
	exotic_add_test(&handle, &exotic_test_cred_from_string_8, "cred_from_string_8");
	exotic_add_test(&handle, &exotic_test_cred_from_string_9, "cred_from_string_9");
	exotic_add_test(&handle, &exotic_test_cred_from_string_10, "cred_from_string_10");
	exotic_add_test(&handle, &exotic_test_eventqueue_init_1, "eventqueue_init_1");
	exotic_add_test(&handle, &exotic_test_eventqueue_init_2, "eventqueue_init_2");
	exotic_add_test(&handle, &exotic_test_eventqueue_post_1, "eventqueue_post_1");
	exotic_add_test(&handle, &exotic_test_eventqueue_process_1, "eventqueue_process_1");
	exotic_add_test(&handle, &exotic_test_eventqueue_size_1, "eventqueue_size_1");
	exotic_add_test(&handle, &exotic_test_eventqueue_post_2, "eventqueue_post_2");
	exotic_add_test(&handle, &exotic_test_eventqueue_size_2, "eventqueue_size_2");
	exotic_add_test(&handle, &exotic_test_eventqueue_post_3, "eventqueue_post_3");
	exotic_add_test(&handle, &exotic_test_eventqueue_size_3, "eventqueue_size_3");
	exotic_add_test(&handle, &exotic_test_eventqueue_process_2, "eventqueue_process_2");
	exotic_add_test(&handle, &exotic_test_eventqueue_size_4, "eventqueue_size_4");
	exotic_add_test(&handle, &exotic_test_eventqueue_shutdown_1, "eventqueue_shutdown_1");
	exotic_add_test(&handle, &exotic_test_hub_net_startup, "hub_net_startup");
	exotic_add_test(&handle, &exotic_test_hub_config_initialize, "hub_config_initialize");
	exotic_add_test(&handle, &exotic_test_hub_acl_initialize, "hub_acl_initialize");
	exotic_add_test(&handle, &exotic_test_hub_service_initialize, "hub_service_initialize");
	exotic_add_test(&handle, &exotic_test_hub_variables_startup, "hub_variables_startup");
	exotic_add_test(&handle, &exotic_test_hub_variables_shutdown, "hub_variables_shutdown");
	exotic_add_test(&handle, &exotic_test_hub_acl_shutdown, "hub_acl_shutdown");
	exotic_add_test(&handle, &exotic_test_hub_config_shutdown, "hub_config_shutdown");
	exotic_add_test(&handle, &exotic_test_hub_service_shutdown, "hub_service_shutdown");
	exotic_add_test(&handle, &exotic_test_hub_net_shutdown, "hub_net_shutdown");
	exotic_add_test(&handle, &exotic_test_inf_create_setup, "inf_create_setup");
	exotic_add_test(&handle, &exotic_test_inf_ok_1, "inf_ok_1");
	exotic_add_test(&handle, &exotic_test_inf_cid_1, "inf_cid_1");
	exotic_add_test(&handle, &exotic_test_inf_cid_2, "inf_cid_2");
	exotic_add_test(&handle, &exotic_test_inf_cid_3, "inf_cid_3");
	exotic_add_test(&handle, &exotic_test_inf_cid_4, "inf_cid_4");
	exotic_add_test(&handle, &exotic_test_inf_cid_5, "inf_cid_5");
	exotic_add_test(&handle, &exotic_test_inf_cid_6, "inf_cid_6");
	exotic_add_test(&handle, &exotic_test_inf_cid_7, "inf_cid_7");
	exotic_add_test(&handle, &exotic_test_inf_cid_8, "inf_cid_8");
	exotic_add_test(&handle, &exotic_test_inf_cid_9, "inf_cid_9");
	exotic_add_test(&handle, &exotic_test_inf_pid_1, "inf_pid_1");
	exotic_add_test(&handle, &exotic_test_inf_pid_2, "inf_pid_2");
	exotic_add_test(&handle, &exotic_test_inf_pid_3, "inf_pid_3");
	exotic_add_test(&handle, &exotic_test_inf_pid_4, "inf_pid_4");
	exotic_add_test(&handle, &exotic_test_inf_pid_5, "inf_pid_5");
	exotic_add_test(&handle, &exotic_test_inf_pid_6, "inf_pid_6");
	exotic_add_test(&handle, &exotic_test_inf_pid_7, "inf_pid_7");
	exotic_add_test(&handle, &exotic_test_inf_pid_8, "inf_pid_8");
	exotic_add_test(&handle, &exotic_test_inf_pid_9, "inf_pid_9");
	exotic_add_test(&handle, &exotic_test_inf_nick_01, "inf_nick_01");
	exotic_add_test(&handle, &exotic_test_inf_nick_02, "inf_nick_02");
	exotic_add_test(&handle, &exotic_test_inf_nick_03, "inf_nick_03");
	exotic_add_test(&handle, &exotic_test_inf_nick_04, "inf_nick_04");
	exotic_add_test(&handle, &exotic_test_inf_nick_05, "inf_nick_05");
	exotic_add_test(&handle, &exotic_test_inf_nick_06, "inf_nick_06");
	exotic_add_test(&handle, &exotic_test_inf_nick_07, "inf_nick_07");
	exotic_add_test(&handle, &exotic_test_inf_nick_08, "inf_nick_08");
	exotic_add_test(&handle, &exotic_test_inf_nick_09, "inf_nick_09");
	exotic_add_test(&handle, &exotic_test_inf_nick_10, "inf_nick_10");
	exotic_add_test(&handle, &exotic_test_inf_limits_1, "inf_limits_1");
	exotic_add_test(&handle, &exotic_test_inf_limits_2, "inf_limits_2");
	exotic_add_test(&handle, &exotic_test_inf_limits_3, "inf_limits_3");
	exotic_add_test(&handle, &exotic_test_inf_limits_4, "inf_limits_4");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_setup, "inf_limit_hubs_setup");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_1, "inf_limit_hubs_1");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_2, "inf_limit_hubs_2");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_3, "inf_limit_hubs_3");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_4, "inf_limit_hubs_4");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_5, "inf_limit_hubs_5");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_6, "inf_limit_hubs_6");
	exotic_add_test(&handle, &exotic_test_inf_limit_hubs_7, "inf_limit_hubs_7");
	exotic_add_test(&handle, &exotic_test_inf_destroy_setup, "inf_destroy_setup");
	exotic_add_test(&handle, &exotic_test_prepare_network, "prepare_network");
	exotic_add_test(&handle, &exotic_test_check_ipv6, "check_ipv6");
	exotic_add_test(&handle, &exotic_test_create_addresses_1, "create_addresses_1");
	exotic_add_test(&handle, &exotic_test_create_addresses_2, "create_addresses_2");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_1, "ip_is_valid_ipv4_1");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_2, "ip_is_valid_ipv4_2");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_3, "ip_is_valid_ipv4_3");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_4, "ip_is_valid_ipv4_4");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_5, "ip_is_valid_ipv4_5");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_6, "ip_is_valid_ipv4_6");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_7, "ip_is_valid_ipv4_7");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_8, "ip_is_valid_ipv4_8");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv4_9, "ip_is_valid_ipv4_9");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv6_1, "ip_is_valid_ipv6_1");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv6_2, "ip_is_valid_ipv6_2");
	exotic_add_test(&handle, &exotic_test_ip_is_valid_ipv6_3, "ip_is_valid_ipv6_3");
	exotic_add_test(&handle, &exotic_test_ip4_compare_1, "ip4_compare_1");
	exotic_add_test(&handle, &exotic_test_ip4_compare_2, "ip4_compare_2");
	exotic_add_test(&handle, &exotic_test_ip4_compare_3, "ip4_compare_3");
	exotic_add_test(&handle, &exotic_test_ip4_compare_4, "ip4_compare_4");
	exotic_add_test(&handle, &exotic_test_ip4_compare_5, "ip4_compare_5");
	exotic_add_test(&handle, &exotic_test_ip4_compare_6, "ip4_compare_6");
	exotic_add_test(&handle, &exotic_test_ip6_compare_1, "ip6_compare_1");
	exotic_add_test(&handle, &exotic_test_ip6_compare_2, "ip6_compare_2");
	exotic_add_test(&handle, &exotic_test_ip6_compare_3, "ip6_compare_3");
	exotic_add_test(&handle, &exotic_test_ip6_compare_4, "ip6_compare_4");
	exotic_add_test(&handle, &exotic_test_ip6_compare_5, "ip6_compare_5");
	exotic_add_test(&handle, &exotic_test_ip6_compare_6, "ip6_compare_6");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_0, "ipv4_lmask_create_0");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_1, "ipv4_lmask_create_1");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_2, "ipv4_lmask_create_2");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_3, "ipv4_lmask_create_3");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_4, "ipv4_lmask_create_4");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_5, "ipv4_lmask_create_5");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_6, "ipv4_lmask_create_6");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_7, "ipv4_lmask_create_7");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_8, "ipv4_lmask_create_8");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_9, "ipv4_lmask_create_9");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_10, "ipv4_lmask_create_10");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_11, "ipv4_lmask_create_11");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_12, "ipv4_lmask_create_12");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_13, "ipv4_lmask_create_13");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_14, "ipv4_lmask_create_14");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_15, "ipv4_lmask_create_15");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_16, "ipv4_lmask_create_16");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_17, "ipv4_lmask_create_17");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_18, "ipv4_lmask_create_18");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_19, "ipv4_lmask_create_19");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_20, "ipv4_lmask_create_20");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_21, "ipv4_lmask_create_21");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_22, "ipv4_lmask_create_22");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_23, "ipv4_lmask_create_23");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_24, "ipv4_lmask_create_24");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_25, "ipv4_lmask_create_25");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_26, "ipv4_lmask_create_26");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_27, "ipv4_lmask_create_27");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_28, "ipv4_lmask_create_28");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_29, "ipv4_lmask_create_29");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_30, "ipv4_lmask_create_30");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_31, "ipv4_lmask_create_31");
	exotic_add_test(&handle, &exotic_test_ipv4_lmask_create_32, "ipv4_lmask_create_32");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_0, "ipv4_rmask_create_0");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_1, "ipv4_rmask_create_1");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_2, "ipv4_rmask_create_2");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_3, "ipv4_rmask_create_3");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_4, "ipv4_rmask_create_4");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_5, "ipv4_rmask_create_5");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_6, "ipv4_rmask_create_6");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_7, "ipv4_rmask_create_7");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_8, "ipv4_rmask_create_8");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_9, "ipv4_rmask_create_9");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_10, "ipv4_rmask_create_10");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_11, "ipv4_rmask_create_11");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_12, "ipv4_rmask_create_12");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_13, "ipv4_rmask_create_13");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_14, "ipv4_rmask_create_14");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_15, "ipv4_rmask_create_15");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_16, "ipv4_rmask_create_16");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_17, "ipv4_rmask_create_17");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_18, "ipv4_rmask_create_18");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_19, "ipv4_rmask_create_19");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_20, "ipv4_rmask_create_20");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_21, "ipv4_rmask_create_21");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_22, "ipv4_rmask_create_22");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_23, "ipv4_rmask_create_23");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_24, "ipv4_rmask_create_24");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_25, "ipv4_rmask_create_25");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_26, "ipv4_rmask_create_26");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_27, "ipv4_rmask_create_27");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_28, "ipv4_rmask_create_28");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_29, "ipv4_rmask_create_29");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_30, "ipv4_rmask_create_30");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_31, "ipv4_rmask_create_31");
	exotic_add_test(&handle, &exotic_test_ipv4_rmask_create_32, "ipv4_rmask_create_32");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_0, "ip6_lmask_create_0");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_1, "ip6_lmask_create_1");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_2, "ip6_lmask_create_2");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_3, "ip6_lmask_create_3");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_4, "ip6_lmask_create_4");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_5, "ip6_lmask_create_5");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_6, "ip6_lmask_create_6");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_7, "ip6_lmask_create_7");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_8, "ip6_lmask_create_8");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_9, "ip6_lmask_create_9");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_10, "ip6_lmask_create_10");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_11, "ip6_lmask_create_11");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_12, "ip6_lmask_create_12");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_13, "ip6_lmask_create_13");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_14, "ip6_lmask_create_14");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_15, "ip6_lmask_create_15");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_16, "ip6_lmask_create_16");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_17, "ip6_lmask_create_17");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_18, "ip6_lmask_create_18");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_19, "ip6_lmask_create_19");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_20, "ip6_lmask_create_20");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_21, "ip6_lmask_create_21");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_22, "ip6_lmask_create_22");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_23, "ip6_lmask_create_23");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_24, "ip6_lmask_create_24");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_25, "ip6_lmask_create_25");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_26, "ip6_lmask_create_26");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_27, "ip6_lmask_create_27");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_28, "ip6_lmask_create_28");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_29, "ip6_lmask_create_29");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_30, "ip6_lmask_create_30");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_31, "ip6_lmask_create_31");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_32, "ip6_lmask_create_32");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_33, "ip6_lmask_create_33");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_34, "ip6_lmask_create_34");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_35, "ip6_lmask_create_35");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_36, "ip6_lmask_create_36");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_37, "ip6_lmask_create_37");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_38, "ip6_lmask_create_38");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_39, "ip6_lmask_create_39");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_40, "ip6_lmask_create_40");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_41, "ip6_lmask_create_41");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_42, "ip6_lmask_create_42");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_43, "ip6_lmask_create_43");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_44, "ip6_lmask_create_44");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_45, "ip6_lmask_create_45");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_46, "ip6_lmask_create_46");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_47, "ip6_lmask_create_47");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_48, "ip6_lmask_create_48");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_49, "ip6_lmask_create_49");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_50, "ip6_lmask_create_50");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_51, "ip6_lmask_create_51");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_52, "ip6_lmask_create_52");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_53, "ip6_lmask_create_53");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_54, "ip6_lmask_create_54");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_55, "ip6_lmask_create_55");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_56, "ip6_lmask_create_56");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_57, "ip6_lmask_create_57");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_58, "ip6_lmask_create_58");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_59, "ip6_lmask_create_59");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_60, "ip6_lmask_create_60");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_61, "ip6_lmask_create_61");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_62, "ip6_lmask_create_62");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_63, "ip6_lmask_create_63");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_64, "ip6_lmask_create_64");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_65, "ip6_lmask_create_65");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_66, "ip6_lmask_create_66");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_67, "ip6_lmask_create_67");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_68, "ip6_lmask_create_68");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_69, "ip6_lmask_create_69");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_70, "ip6_lmask_create_70");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_71, "ip6_lmask_create_71");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_72, "ip6_lmask_create_72");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_73, "ip6_lmask_create_73");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_74, "ip6_lmask_create_74");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_75, "ip6_lmask_create_75");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_76, "ip6_lmask_create_76");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_77, "ip6_lmask_create_77");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_78, "ip6_lmask_create_78");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_79, "ip6_lmask_create_79");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_80, "ip6_lmask_create_80");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_81, "ip6_lmask_create_81");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_82, "ip6_lmask_create_82");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_83, "ip6_lmask_create_83");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_84, "ip6_lmask_create_84");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_85, "ip6_lmask_create_85");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_86, "ip6_lmask_create_86");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_87, "ip6_lmask_create_87");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_88, "ip6_lmask_create_88");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_89, "ip6_lmask_create_89");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_90, "ip6_lmask_create_90");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_91, "ip6_lmask_create_91");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_92, "ip6_lmask_create_92");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_93, "ip6_lmask_create_93");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_94, "ip6_lmask_create_94");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_95, "ip6_lmask_create_95");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_96, "ip6_lmask_create_96");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_97, "ip6_lmask_create_97");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_98, "ip6_lmask_create_98");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_99, "ip6_lmask_create_99");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_100, "ip6_lmask_create_100");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_101, "ip6_lmask_create_101");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_102, "ip6_lmask_create_102");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_103, "ip6_lmask_create_103");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_104, "ip6_lmask_create_104");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_105, "ip6_lmask_create_105");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_106, "ip6_lmask_create_106");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_107, "ip6_lmask_create_107");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_108, "ip6_lmask_create_108");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_109, "ip6_lmask_create_109");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_110, "ip6_lmask_create_110");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_111, "ip6_lmask_create_111");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_112, "ip6_lmask_create_112");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_113, "ip6_lmask_create_113");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_114, "ip6_lmask_create_114");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_115, "ip6_lmask_create_115");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_116, "ip6_lmask_create_116");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_117, "ip6_lmask_create_117");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_118, "ip6_lmask_create_118");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_119, "ip6_lmask_create_119");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_120, "ip6_lmask_create_120");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_121, "ip6_lmask_create_121");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_122, "ip6_lmask_create_122");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_123, "ip6_lmask_create_123");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_124, "ip6_lmask_create_124");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_125, "ip6_lmask_create_125");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_126, "ip6_lmask_create_126");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_127, "ip6_lmask_create_127");
	exotic_add_test(&handle, &exotic_test_ip6_lmask_create_128, "ip6_lmask_create_128");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_0, "ip6_rmask_create_0");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_1, "ip6_rmask_create_1");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_2, "ip6_rmask_create_2");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_3, "ip6_rmask_create_3");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_4, "ip6_rmask_create_4");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_5, "ip6_rmask_create_5");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_6, "ip6_rmask_create_6");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_7, "ip6_rmask_create_7");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_8, "ip6_rmask_create_8");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_9, "ip6_rmask_create_9");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_10, "ip6_rmask_create_10");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_11, "ip6_rmask_create_11");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_12, "ip6_rmask_create_12");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_13, "ip6_rmask_create_13");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_14, "ip6_rmask_create_14");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_15, "ip6_rmask_create_15");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_16, "ip6_rmask_create_16");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_17, "ip6_rmask_create_17");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_18, "ip6_rmask_create_18");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_19, "ip6_rmask_create_19");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_20, "ip6_rmask_create_20");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_21, "ip6_rmask_create_21");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_22, "ip6_rmask_create_22");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_23, "ip6_rmask_create_23");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_24, "ip6_rmask_create_24");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_25, "ip6_rmask_create_25");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_26, "ip6_rmask_create_26");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_27, "ip6_rmask_create_27");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_28, "ip6_rmask_create_28");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_29, "ip6_rmask_create_29");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_30, "ip6_rmask_create_30");
	exotic_add_test(&handle, &exotic_test_ip6_rmask_create_31, "ip6_rmask_create_31");
	exotic_add_test(&handle, &exotic_test_check_ban_setup_1, "check_ban_setup_1");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv4_1, "check_ban_ipv4_1");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv4_2, "check_ban_ipv4_2");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv4_3, "check_ban_ipv4_3");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv4_4, "check_ban_ipv4_4");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv4_5, "check_ban_ipv4_5");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv6_1, "check_ban_ipv6_1");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv6_2, "check_ban_ipv6_2");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv6_3, "check_ban_ipv6_3");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv6_4, "check_ban_ipv6_4");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv6_5, "check_ban_ipv6_5");
	exotic_add_test(&handle, &exotic_test_check_ban_ipv6_6, "check_ban_ipv6_6");
	exotic_add_test(&handle, &exotic_test_check_ban_afmix_1, "check_ban_afmix_1");
	exotic_add_test(&handle, &exotic_test_check_ban_afmix_2, "check_ban_afmix_2");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_AND_1, "ip4_bitwise_AND_1");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_AND_2, "ip4_bitwise_AND_2");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_AND_3, "ip4_bitwise_AND_3");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_AND_4, "ip4_bitwise_AND_4");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_AND_5, "ip4_bitwise_AND_5");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_OR_1, "ip4_bitwise_OR_1");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_OR_2, "ip4_bitwise_OR_2");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_OR_3, "ip4_bitwise_OR_3");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_OR_4, "ip4_bitwise_OR_4");
	exotic_add_test(&handle, &exotic_test_ip4_bitwise_OR_5, "ip4_bitwise_OR_5");
	exotic_add_test(&handle, &exotic_test_ip6_bitwise_AND_1, "ip6_bitwise_AND_1");
	exotic_add_test(&handle, &exotic_test_ip6_bitwise_AND_2, "ip6_bitwise_AND_2");
	exotic_add_test(&handle, &exotic_test_ip6_bitwise_AND_3, "ip6_bitwise_AND_3");
	exotic_add_test(&handle, &exotic_test_ip6_bitwise_OR_1, "ip6_bitwise_OR_1");
	exotic_add_test(&handle, &exotic_test_ip6_bitwise_OR_2, "ip6_bitwise_OR_2");
	exotic_add_test(&handle, &exotic_test_ip6_bitwise_OR_3, "ip6_bitwise_OR_3");
	exotic_add_test(&handle, &exotic_test_ip_range_1, "ip_range_1");
	exotic_add_test(&handle, &exotic_test_ip_range_2, "ip_range_2");
	exotic_add_test(&handle, &exotic_test_ip_range_3, "ip_range_3");
	exotic_add_test(&handle, &exotic_test_ip_range_4, "ip_range_4");
	exotic_add_test(&handle, &exotic_test_shutdown_network, "shutdown_network");
	exotic_add_test(&handle, &exotic_test_list_create_destroy, "list_create_destroy");
	exotic_add_test(&handle, &exotic_test_list_create, "list_create");
	exotic_add_test(&handle, &exotic_test_list_append_1, "list_append_1");
	exotic_add_test(&handle, &exotic_test_list_remove_1, "list_remove_1");
	exotic_add_test(&handle, &exotic_test_list_append_2, "list_append_2");
	exotic_add_test(&handle, &exotic_test_list_remove_2, "list_remove_2");
	exotic_add_test(&handle, &exotic_test_list_remove_3, "list_remove_3");
	exotic_add_test(&handle, &exotic_test_list_remove_4, "list_remove_4");
	exotic_add_test(&handle, &exotic_test_list_append_3, "list_append_3");
	exotic_add_test(&handle, &exotic_test_list_append_4, "list_append_4");
	exotic_add_test(&handle, &exotic_test_list_remove_5, "list_remove_5");
	exotic_add_test(&handle, &exotic_test_list_get_index_1, "list_get_index_1");
	exotic_add_test(&handle, &exotic_test_list_get_index_2, "list_get_index_2");
	exotic_add_test(&handle, &exotic_test_list_get_index_3, "list_get_index_3");
	exotic_add_test(&handle, &exotic_test_list_get_index_4, "list_get_index_4");
	exotic_add_test(&handle, &exotic_test_list_get_first_1, "list_get_first_1");
	exotic_add_test(&handle, &exotic_test_list_get_first_next_1, "list_get_first_next_1");
	exotic_add_test(&handle, &exotic_test_list_get_first_next_2, "list_get_first_next_2");
	exotic_add_test(&handle, &exotic_test_list_get_last_1, "list_get_last_1");
	exotic_add_test(&handle, &exotic_test_list_get_last_prev_1, "list_get_last_prev_1");
	exotic_add_test(&handle, &exotic_test_list_get_last_prev_2, "list_get_last_prev_2");
	exotic_add_test(&handle, &exotic_test_list_get_last_prev_next_1, "list_get_last_prev_next_1");
	exotic_add_test(&handle, &exotic_test_list_clear, "list_clear");
	exotic_add_test(&handle, &exotic_test_list_destroy_1, "list_destroy_1");
	exotic_add_test(&handle, &exotic_test_list_destroy_2, "list_destroy_2");
	exotic_add_test(&handle, &exotic_test_test_message_refc_1, "test_message_refc_1");
	exotic_add_test(&handle, &exotic_test_test_message_refc_2, "test_message_refc_2");
	exotic_add_test(&handle, &exotic_test_test_message_refc_3, "test_message_refc_3");
	exotic_add_test(&handle, &exotic_test_test_message_refc_4, "test_message_refc_4");
	exotic_add_test(&handle, &exotic_test_test_message_refc_5, "test_message_refc_5");
	exotic_add_test(&handle, &exotic_test_test_message_refc_6, "test_message_refc_6");
	exotic_add_test(&handle, &exotic_test_test_message_refc_7, "test_message_refc_7");
	exotic_add_test(&handle, &exotic_test_adc_message_first, "adc_message_first");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_1, "adc_message_parse_1");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_2, "adc_message_parse_2");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_3, "adc_message_parse_3");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_4, "adc_message_parse_4");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_5, "adc_message_parse_5");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_6, "adc_message_parse_6");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_7, "adc_message_parse_7");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_8, "adc_message_parse_8");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_9, "adc_message_parse_9");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_10, "adc_message_parse_10");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_11, "adc_message_parse_11");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_12, "adc_message_parse_12");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_13, "adc_message_parse_13");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_14, "adc_message_parse_14");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_15, "adc_message_parse_15");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_16, "adc_message_parse_16");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_17, "adc_message_parse_17");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_18, "adc_message_parse_18");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_19, "adc_message_parse_19");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_20, "adc_message_parse_20");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_21, "adc_message_parse_21");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_22, "adc_message_parse_22");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_23, "adc_message_parse_23");
	exotic_add_test(&handle, &exotic_test_adc_message_parse_24, "adc_message_parse_24");
	exotic_add_test(&handle, &exotic_test_adc_message_add_arg_1, "adc_message_add_arg_1");
	exotic_add_test(&handle, &exotic_test_adc_message_add_arg_2, "adc_message_add_arg_2");
	exotic_add_test(&handle, &exotic_test_adc_message_remove_arg_1, "adc_message_remove_arg_1");
	exotic_add_test(&handle, &exotic_test_adc_message_remove_arg_2, "adc_message_remove_arg_2");
	exotic_add_test(&handle, &exotic_test_adc_message_remove_arg_3, "adc_message_remove_arg_3");
	exotic_add_test(&handle, &exotic_test_adc_message_remove_arg_4, "adc_message_remove_arg_4");
	exotic_add_test(&handle, &exotic_test_adc_message_replace_arg_1, "adc_message_replace_arg_1");
	exotic_add_test(&handle, &exotic_test_adc_message_replace_arg_2, "adc_message_replace_arg_2");
	exotic_add_test(&handle, &exotic_test_adc_message_replace_arg_3, "adc_message_replace_arg_3");
	exotic_add_test(&handle, &exotic_test_adc_message_get_arg_1, "adc_message_get_arg_1");
	exotic_add_test(&handle, &exotic_test_adc_message_get_arg_2, "adc_message_get_arg_2");
	exotic_add_test(&handle, &exotic_test_adc_message_get_arg_3, "adc_message_get_arg_3");
	exotic_add_test(&handle, &exotic_test_adc_message_get_arg_4, "adc_message_get_arg_4");
	exotic_add_test(&handle, &exotic_test_adc_message_get_named_arg_1, "adc_message_get_named_arg_1");
	exotic_add_test(&handle, &exotic_test_adc_message_get_named_arg_2, "adc_message_get_named_arg_2");
	exotic_add_test(&handle, &exotic_test_adc_message_get_named_arg_3, "adc_message_get_named_arg_3");
	exotic_add_test(&handle, &exotic_test_adc_message_get_named_arg_4, "adc_message_get_named_arg_4");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_1, "adc_message_has_named_arg_1");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_2, "adc_message_has_named_arg_2");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_3, "adc_message_has_named_arg_3");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_4, "adc_message_has_named_arg_4");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_5, "adc_message_has_named_arg_5");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_6, "adc_message_has_named_arg_6");
	exotic_add_test(&handle, &exotic_test_adc_message_has_named_arg_7, "adc_message_has_named_arg_7");
	exotic_add_test(&handle, &exotic_test_adc_message_terminate_1, "adc_message_terminate_1");
	exotic_add_test(&handle, &exotic_test_adc_message_terminate_2, "adc_message_terminate_2");
	exotic_add_test(&handle, &exotic_test_adc_message_terminate_3, "adc_message_terminate_3");
	exotic_add_test(&handle, &exotic_test_adc_message_terminate_4, "adc_message_terminate_4");
	exotic_add_test(&handle, &exotic_test_adc_message_terminate_5, "adc_message_terminate_5");
	exotic_add_test(&handle, &exotic_test_adc_message_terminate_6, "adc_message_terminate_6");
	exotic_add_test(&handle, &exotic_test_adc_message_escape_1, "adc_message_escape_1");
	exotic_add_test(&handle, &exotic_test_adc_message_escape_2, "adc_message_escape_2");
	exotic_add_test(&handle, &exotic_test_adc_message_escape_3, "adc_message_escape_3");
	exotic_add_test(&handle, &exotic_test_adc_message_copy_1, "adc_message_copy_1");
	exotic_add_test(&handle, &exotic_test_adc_message_copy_2, "adc_message_copy_2");
	exotic_add_test(&handle, &exotic_test_adc_message_copy_3, "adc_message_copy_3");
	exotic_add_test(&handle, &exotic_test_adc_message_copy_4, "adc_message_copy_4");
	exotic_add_test(&handle, &exotic_test_adc_message_update_1, "adc_message_update_1");
	exotic_add_test(&handle, &exotic_test_adc_message_update_2, "adc_message_update_2");
	exotic_add_test(&handle, &exotic_test_adc_message_update_3, "adc_message_update_3");
	exotic_add_test(&handle, &exotic_test_adc_message_update_4, "adc_message_update_4");
	exotic_add_test(&handle, &exotic_test_adc_message_update_4_cleanup, "adc_message_update_4_cleanup");
	exotic_add_test(&handle, &exotic_test_adc_message_empty_1, "adc_message_empty_1");
	exotic_add_test(&handle, &exotic_test_adc_message_empty_2, "adc_message_empty_2");
	exotic_add_test(&handle, &exotic_test_adc_message_empty_3, "adc_message_empty_3");
	exotic_add_test(&handle, &exotic_test_adc_message_last, "adc_message_last");
	exotic_add_test(&handle, &exotic_test_is_num_0, "is_num_0");
	exotic_add_test(&handle, &exotic_test_is_num_1, "is_num_1");
	exotic_add_test(&handle, &exotic_test_is_num_2, "is_num_2");
	exotic_add_test(&handle, &exotic_test_is_num_3, "is_num_3");
	exotic_add_test(&handle, &exotic_test_is_num_4, "is_num_4");
	exotic_add_test(&handle, &exotic_test_is_num_5, "is_num_5");
	exotic_add_test(&handle, &exotic_test_is_num_6, "is_num_6");
	exotic_add_test(&handle, &exotic_test_is_num_7, "is_num_7");
	exotic_add_test(&handle, &exotic_test_is_num_8, "is_num_8");
	exotic_add_test(&handle, &exotic_test_is_num_9, "is_num_9");
	exotic_add_test(&handle, &exotic_test_is_num_10, "is_num_10");
	exotic_add_test(&handle, &exotic_test_is_num_11, "is_num_11");
	exotic_add_test(&handle, &exotic_test_is_space_1, "is_space_1");
	exotic_add_test(&handle, &exotic_test_is_space_2, "is_space_2");
	exotic_add_test(&handle, &exotic_test_is_white_space_1, "is_white_space_1");
	exotic_add_test(&handle, &exotic_test_is_white_space_2, "is_white_space_2");
	exotic_add_test(&handle, &exotic_test_is_white_space_3, "is_white_space_3");
	exotic_add_test(&handle, &exotic_test_is_white_space_4, "is_white_space_4");
	exotic_add_test(&handle, &exotic_test_itoa_1, "itoa_1");
	exotic_add_test(&handle, &exotic_test_itoa_2, "itoa_2");
	exotic_add_test(&handle, &exotic_test_itoa_3, "itoa_3");
	exotic_add_test(&handle, &exotic_test_itoa_4, "itoa_4");
	exotic_add_test(&handle, &exotic_test_itoa_5, "itoa_5");
	exotic_add_test(&handle, &exotic_test_itoa_6, "itoa_6");
	exotic_add_test(&handle, &exotic_test_itoa_7, "itoa_7");
	exotic_add_test(&handle, &exotic_test_itoa_8, "itoa_8");
	exotic_add_test(&handle, &exotic_test_base32_valid_1, "base32_valid_1");
	exotic_add_test(&handle, &exotic_test_base32_valid_2, "base32_valid_2");
	exotic_add_test(&handle, &exotic_test_base32_valid_3, "base32_valid_3");
	exotic_add_test(&handle, &exotic_test_base32_valid_4, "base32_valid_4");
	exotic_add_test(&handle, &exotic_test_base32_valid_5, "base32_valid_5");
	exotic_add_test(&handle, &exotic_test_base32_valid_6, "base32_valid_6");
	exotic_add_test(&handle, &exotic_test_base32_valid_7, "base32_valid_7");
	exotic_add_test(&handle, &exotic_test_base32_valid_8, "base32_valid_8");
	exotic_add_test(&handle, &exotic_test_base32_valid_9, "base32_valid_9");
	exotic_add_test(&handle, &exotic_test_base32_valid_10, "base32_valid_10");
	exotic_add_test(&handle, &exotic_test_base32_valid_11, "base32_valid_11");
	exotic_add_test(&handle, &exotic_test_base32_valid_12, "base32_valid_12");
	exotic_add_test(&handle, &exotic_test_base32_valid_13, "base32_valid_13");
	exotic_add_test(&handle, &exotic_test_base32_valid_14, "base32_valid_14");
	exotic_add_test(&handle, &exotic_test_base32_valid_15, "base32_valid_15");
	exotic_add_test(&handle, &exotic_test_base32_valid_16, "base32_valid_16");
	exotic_add_test(&handle, &exotic_test_base32_valid_17, "base32_valid_17");
	exotic_add_test(&handle, &exotic_test_base32_valid_18, "base32_valid_18");
	exotic_add_test(&handle, &exotic_test_base32_valid_19, "base32_valid_19");
	exotic_add_test(&handle, &exotic_test_base32_valid_20, "base32_valid_20");
	exotic_add_test(&handle, &exotic_test_base32_valid_21, "base32_valid_21");
	exotic_add_test(&handle, &exotic_test_base32_valid_22, "base32_valid_22");
	exotic_add_test(&handle, &exotic_test_base32_valid_23, "base32_valid_23");
	exotic_add_test(&handle, &exotic_test_base32_valid_24, "base32_valid_24");
	exotic_add_test(&handle, &exotic_test_base32_valid_25, "base32_valid_25");
	exotic_add_test(&handle, &exotic_test_base32_valid_26, "base32_valid_26");
	exotic_add_test(&handle, &exotic_test_base32_valid_27, "base32_valid_27");
	exotic_add_test(&handle, &exotic_test_base32_valid_28, "base32_valid_28");
	exotic_add_test(&handle, &exotic_test_base32_valid_29, "base32_valid_29");
	exotic_add_test(&handle, &exotic_test_base32_valid_30, "base32_valid_30");
	exotic_add_test(&handle, &exotic_test_base32_valid_31, "base32_valid_31");
	exotic_add_test(&handle, &exotic_test_base32_valid_32, "base32_valid_32");
	exotic_add_test(&handle, &exotic_test_base32_invalid_1, "base32_invalid_1");
	exotic_add_test(&handle, &exotic_test_base32_invalid_2, "base32_invalid_2");
	exotic_add_test(&handle, &exotic_test_base32_invalid_3, "base32_invalid_3");
	exotic_add_test(&handle, &exotic_test_base32_invalid_4, "base32_invalid_4");
	exotic_add_test(&handle, &exotic_test_base32_invalid_5, "base32_invalid_5");
	exotic_add_test(&handle, &exotic_test_base32_invalid_6, "base32_invalid_6");
	exotic_add_test(&handle, &exotic_test_base32_invalid_7, "base32_invalid_7");
	exotic_add_test(&handle, &exotic_test_base32_invalid_8, "base32_invalid_8");
	exotic_add_test(&handle, &exotic_test_base32_invalid_9, "base32_invalid_9");
	exotic_add_test(&handle, &exotic_test_base32_invalid_10, "base32_invalid_10");
	exotic_add_test(&handle, &exotic_test_base32_invalid_11, "base32_invalid_11");
	exotic_add_test(&handle, &exotic_test_base32_invalid_12, "base32_invalid_12");
	exotic_add_test(&handle, &exotic_test_base32_invalid_13, "base32_invalid_13");
	exotic_add_test(&handle, &exotic_test_base32_invalid_14, "base32_invalid_14");
	exotic_add_test(&handle, &exotic_test_base32_invalid_15, "base32_invalid_15");
	exotic_add_test(&handle, &exotic_test_base32_invalid_16, "base32_invalid_16");
	exotic_add_test(&handle, &exotic_test_base32_invalid_17, "base32_invalid_17");
	exotic_add_test(&handle, &exotic_test_base32_invalid_18, "base32_invalid_18");
	exotic_add_test(&handle, &exotic_test_base32_invalid_19, "base32_invalid_19");
	exotic_add_test(&handle, &exotic_test_base32_invalid_20, "base32_invalid_20");
	exotic_add_test(&handle, &exotic_test_base32_invalid_21, "base32_invalid_21");
	exotic_add_test(&handle, &exotic_test_base32_invalid_22, "base32_invalid_22");
	exotic_add_test(&handle, &exotic_test_base32_invalid_23, "base32_invalid_23");
	exotic_add_test(&handle, &exotic_test_base32_invalid_24, "base32_invalid_24");
	exotic_add_test(&handle, &exotic_test_base32_invalid_25, "base32_invalid_25");
	exotic_add_test(&handle, &exotic_test_base32_invalid_26, "base32_invalid_26");
	exotic_add_test(&handle, &exotic_test_base32_invalid_27, "base32_invalid_27");
	exotic_add_test(&handle, &exotic_test_base32_invalid_28, "base32_invalid_28");
	exotic_add_test(&handle, &exotic_test_base32_invalid_29, "base32_invalid_29");
	exotic_add_test(&handle, &exotic_test_base32_invalid_30, "base32_invalid_30");
	exotic_add_test(&handle, &exotic_test_base32_invalid_31, "base32_invalid_31");
	exotic_add_test(&handle, &exotic_test_utf8_valid_1, "utf8_valid_1");
	exotic_add_test(&handle, &exotic_test_utf8_valid_2, "utf8_valid_2");
	exotic_add_test(&handle, &exotic_test_utf8_valid_3, "utf8_valid_3");
	exotic_add_test(&handle, &exotic_test_utf8_valid_4, "utf8_valid_4");
	exotic_add_test(&handle, &exotic_test_utf8_valid_5, "utf8_valid_5");
	exotic_add_test(&handle, &exotic_test_utf8_valid_6, "utf8_valid_6");
	exotic_add_test(&handle, &exotic_test_utf8_valid_7, "utf8_valid_7");
	exotic_add_test(&handle, &exotic_test_utf8_valid_8, "utf8_valid_8");
	exotic_add_test(&handle, &exotic_test_utf8_valid_9, "utf8_valid_9");
	exotic_add_test(&handle, &exotic_test_utf8_valid_10, "utf8_valid_10");
	exotic_add_test(&handle, &exotic_test_utf8_valid_11, "utf8_valid_11");
	exotic_add_test(&handle, &exotic_test_utf8_valid_12, "utf8_valid_12");
	exotic_add_test(&handle, &exotic_test_rbtree_create_destroy, "rbtree_create_destroy");
	exotic_add_test(&handle, &exotic_test_rbtree_create_1, "rbtree_create_1");
	exotic_add_test(&handle, &exotic_test_rbtree_size_0, "rbtree_size_0");
	exotic_add_test(&handle, &exotic_test_rbtree_insert_1, "rbtree_insert_1");
	exotic_add_test(&handle, &exotic_test_rbtree_insert_2, "rbtree_insert_2");
	exotic_add_test(&handle, &exotic_test_rbtree_insert_3, "rbtree_insert_3");
	exotic_add_test(&handle, &exotic_test_rbtree_insert_3_again, "rbtree_insert_3_again");
	exotic_add_test(&handle, &exotic_test_rbtree_size_1, "rbtree_size_1");
	exotic_add_test(&handle, &exotic_test_rbtree_search_1, "rbtree_search_1");
	exotic_add_test(&handle, &exotic_test_rbtree_search_2, "rbtree_search_2");
	exotic_add_test(&handle, &exotic_test_rbtree_search_3, "rbtree_search_3");
	exotic_add_test(&handle, &exotic_test_rbtree_search_4, "rbtree_search_4");
	exotic_add_test(&handle, &exotic_test_rbtree_remove_1, "rbtree_remove_1");
	exotic_add_test(&handle, &exotic_test_rbtree_size_2, "rbtree_size_2");
	exotic_add_test(&handle, &exotic_test_rbtree_remove_2, "rbtree_remove_2");
	exotic_add_test(&handle, &exotic_test_rbtree_remove_3, "rbtree_remove_3");
	exotic_add_test(&handle, &exotic_test_rbtree_remove_3_again, "rbtree_remove_3_again");
	exotic_add_test(&handle, &exotic_test_rbtree_search_5, "rbtree_search_5");
	exotic_add_test(&handle, &exotic_test_rbtree_search_6, "rbtree_search_6");
	exotic_add_test(&handle, &exotic_test_rbtree_search_7, "rbtree_search_7");
	exotic_add_test(&handle, &exotic_test_rbtree_search_8, "rbtree_search_8");
	exotic_add_test(&handle, &exotic_test_rbtree_size_3, "rbtree_size_3");
	exotic_add_test(&handle, &exotic_test_rbtree_insert_10000, "rbtree_insert_10000");
	exotic_add_test(&handle, &exotic_test_rbtree_size_4, "rbtree_size_4");
	exotic_add_test(&handle, &exotic_test_rbtree_check_10000, "rbtree_check_10000");
	exotic_add_test(&handle, &exotic_test_rbtree_iterate_10000, "rbtree_iterate_10000");
	exotic_add_test(&handle, &exotic_test_rbtree_remove_5000, "rbtree_remove_5000");
	exotic_add_test(&handle, &exotic_test_sid_create_pool, "sid_create_pool");
	exotic_add_test(&handle, &exotic_test_sid_check_0a, "sid_check_0a");
	exotic_add_test(&handle, &exotic_test_sid_check_0b, "sid_check_0b");
	exotic_add_test(&handle, &exotic_test_sid_alloc_1, "sid_alloc_1");
	exotic_add_test(&handle, &exotic_test_sid_check_1a, "sid_check_1a");
	exotic_add_test(&handle, &exotic_test_sid_check_1b, "sid_check_1b");
	exotic_add_test(&handle, &exotic_test_sid_alloc_2, "sid_alloc_2");
	exotic_add_test(&handle, &exotic_test_sid_check_2, "sid_check_2");
	exotic_add_test(&handle, &exotic_test_sid_alloc_3, "sid_alloc_3");
	exotic_add_test(&handle, &exotic_test_sid_check_3, "sid_check_3");
	exotic_add_test(&handle, &exotic_test_sid_alloc_4, "sid_alloc_4");
	exotic_add_test(&handle, &exotic_test_sid_check_4, "sid_check_4");
	exotic_add_test(&handle, &exotic_test_sid_alloc_5, "sid_alloc_5");
	exotic_add_test(&handle, &exotic_test_sid_check_6, "sid_check_6");
	exotic_add_test(&handle, &exotic_test_sid_list_all_1, "sid_list_all_1");
	exotic_add_test(&handle, &exotic_test_sid_remove_1, "sid_remove_1");
	exotic_add_test(&handle, &exotic_test_sid_remove_2, "sid_remove_2");
	exotic_add_test(&handle, &exotic_test_sid_remove_3, "sid_remove_3");
	exotic_add_test(&handle, &exotic_test_sid_remove_4, "sid_remove_4");
	exotic_add_test(&handle, &exotic_test_sid_destroy_pool, "sid_destroy_pool");
	exotic_add_test(&handle, &exotic_test_hash_tiger_1, "hash_tiger_1");
	exotic_add_test(&handle, &exotic_test_hash_tiger_2, "hash_tiger_2");
	exotic_add_test(&handle, &exotic_test_hash_tiger_3, "hash_tiger_3");
	exotic_add_test(&handle, &exotic_test_hash_tiger_4, "hash_tiger_4");
	exotic_add_test(&handle, &exotic_test_hash_tiger_5, "hash_tiger_5");
	exotic_add_test(&handle, &exotic_test_hash_tiger_6, "hash_tiger_6");
	exotic_add_test(&handle, &exotic_test_hash_tiger_7, "hash_tiger_7");
	exotic_add_test(&handle, &exotic_test_timer_setup, "timer_setup");
	exotic_add_test(&handle, &exotic_test_timer_check_timeout_0, "timer_check_timeout_0");
	exotic_add_test(&handle, &exotic_test_timer_add_event_1, "timer_add_event_1");
	exotic_add_test(&handle, &exotic_test_timer_check_timeout_1, "timer_check_timeout_1");
	exotic_add_test(&handle, &exotic_test_timer_remove_event_1, "timer_remove_event_1");
	exotic_add_test(&handle, &exotic_test_timer_check_timeout_2, "timer_check_timeout_2");
	exotic_add_test(&handle, &exotic_test_timer_remove_event_1_no_crash, "timer_remove_event_1_no_crash");
	exotic_add_test(&handle, &exotic_test_timer_add_5_events_1, "timer_add_5_events_1");
	exotic_add_test(&handle, &exotic_test_timer_check_5_events_1, "timer_check_5_events_1");
	exotic_add_test(&handle, &exotic_test_timer_process_5_events_1, "timer_process_5_events_1");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_0, "tokenizer_basic_0");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_1, "tokenizer_basic_1");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_1a, "tokenizer_basic_1a");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_1b, "tokenizer_basic_1b");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_1c, "tokenizer_basic_1c");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_1d, "tokenizer_basic_1d");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_1e, "tokenizer_basic_1e");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_2, "tokenizer_basic_2");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_2a, "tokenizer_basic_2a");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_3, "tokenizer_basic_3");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_3a, "tokenizer_basic_3a");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_3b, "tokenizer_basic_3b");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_3c, "tokenizer_basic_3c");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_3d, "tokenizer_basic_3d");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_0, "tokenizer_basic_compare_0");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_1, "tokenizer_basic_compare_1");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_2, "tokenizer_basic_compare_2");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_3, "tokenizer_basic_compare_3");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_4, "tokenizer_basic_compare_4");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_5, "tokenizer_basic_compare_5");
	exotic_add_test(&handle, &exotic_test_tokenizer_basic_compare_6, "tokenizer_basic_compare_6");
	exotic_add_test(&handle, &exotic_test_tokenizer_comment_1, "tokenizer_comment_1");
	exotic_add_test(&handle, &exotic_test_tokenizer_comment_2, "tokenizer_comment_2");
	exotic_add_test(&handle, &exotic_test_tokenizer_comment_3, "tokenizer_comment_3");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_1, "tokenizer_escape_1");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_2, "tokenizer_escape_2");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_3, "tokenizer_escape_3");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_4, "tokenizer_escape_4");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_5, "tokenizer_escape_5");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_6, "tokenizer_escape_6");
	exotic_add_test(&handle, &exotic_test_tokenizer_escape_7, "tokenizer_escape_7");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_1, "tokenizer_settings_1");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_2, "tokenizer_settings_2");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_3, "tokenizer_settings_3");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_4, "tokenizer_settings_4");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_5, "tokenizer_settings_5");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_6, "tokenizer_settings_6");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_7, "tokenizer_settings_7");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_8, "tokenizer_settings_8");
	exotic_add_test(&handle, &exotic_test_tokenizer_settings_9, "tokenizer_settings_9");
	exotic_add_test(&handle, &exotic_test_um_init_1, "um_init_1");
	exotic_add_test(&handle, &exotic_test_um_shutdown_1, "um_shutdown_1");
	exotic_add_test(&handle, &exotic_test_um_shutdown_2, "um_shutdown_2");
	exotic_add_test(&handle, &exotic_test_um_init_2, "um_init_2");
	exotic_add_test(&handle, &exotic_test_um_add_1, "um_add_1");
	exotic_add_test(&handle, &exotic_test_um_size_1, "um_size_1");
	exotic_add_test(&handle, &exotic_test_um_remove_1, "um_remove_1");
	exotic_add_test(&handle, &exotic_test_um_size_2, "um_size_2");
	exotic_add_test(&handle, &exotic_test_um_add_2, "um_add_2");
	exotic_add_test(&handle, &exotic_test_um_size_3, "um_size_3");
	exotic_add_test(&handle, &exotic_test_um_remove_2, "um_remove_2");
	exotic_add_test(&handle, &exotic_test_um_shutdown_4, "um_shutdown_4");

	return exotic_run(&handle);
}


/*
 * Exotic - C/C++ source code testing
 * Copyright (c) 2007, Jan Vidar Krey
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void exotic_version();

#ifndef __EXOTIC__STANDALONE__
#include "autotest.h"
static void exotic_version()
{
	printf("Extatic.org Test Infrastructure: exotic " "${version}" "\n\n");
	printf("Copyright (C) 2007 Jan Vidar Krey, janvidar@extatic.org\n");
	printf("This is free software with ABSOLUTELY NO WARRANTY.\n\n");
}
#endif

struct exo_test_data
{
	exo_test_t test;
	char* name;
	struct exo_test_data* next;
};


static void exotic_summary(struct exotic_handle* handle)
{
	int total     = handle->pass + handle->fail;
	int pass_rate = total ? (100*handle->pass / total) : 0;
	int fail_rate = total ? (100*handle->fail / total) : 0;
	
	printf("\n");
	printf("--------------------------------------------\n");
	printf("Results:\n");
	printf(" * Total tests run:  %8d\n", total);
	printf(" * Tests passed:     %8d (~%d%%)\n", (int) handle->pass, pass_rate);
	printf(" * Tests failed:     %8d (~%d%%)\n", (int) handle->fail, fail_rate);
	printf("--------------------------------------------\n");
}


static void exotic_help(const char* program)
{
	printf("Usage: %s [OPTIONS]\n\n", program);
	printf("Options:\n");
	printf("  --help      -h    Show this message\n");
	printf("  --version   -v    Show version\n");
	printf("  --summary   -s    show only summary)\n");
	printf("  --fail      -f    show only test failures\n");
	printf("  --pass      -p    show only test passes\n");
	printf("\nExamples:\n");
	printf("  %s -s -f\n\n", program);
}


int exotic_initialize(struct exotic_handle* handle, int argc, char** argv)
{
	int n;
	if (!handle || !argv) return -1;
	
	memset(handle, 0, sizeof(struct exotic_handle));
	
	for (n = 1; n < argc; n++)
	{
		if (!strcmp(argv[n], "-h") || !strcmp(argv[n], "--help"))
		{
			exotic_help(argv[0]);
			exit(0);
		}
		
		if (!strcmp(argv[n], "-v") || !strcmp(argv[n], "--version"))
		{
			exotic_version();
			exit(0);
		}
		
		if (!strcmp(argv[n], "-s") || !strcmp(argv[n], "--summary"))
		{
			handle->config_show_summary = cfg_on;
			continue;
		}
		
		if (!strcmp(argv[n], "-f") || !strcmp(argv[n], "--fail"))
		{
			handle->config_show_fail = cfg_on;
			continue;
		}
		
		if (!strcmp(argv[n], "-p") || !strcmp(argv[n], "--pass"))
		{
			handle->config_show_pass = cfg_on;
			continue;
		}
		
		fprintf(stderr, "Unknown argument: %s\n\n", argv[n]);
		exotic_help(argv[0]);
		exit(0);
	}
	
	if (handle->config_show_summary == cfg_on)
	{
		if (handle->config_show_pass == cfg_default) handle->config_show_pass = cfg_off;
		if (handle->config_show_fail == cfg_default) handle->config_show_fail = cfg_off;
	
	}
	else if (handle->config_show_pass == cfg_on)
	{
		if (handle->config_show_summary == cfg_default) handle->config_show_summary = cfg_off;
		if (handle->config_show_fail    == cfg_default) handle->config_show_fail = cfg_off;
	}
	else if (handle->config_show_fail == cfg_on)
	{
		if (handle->config_show_summary == cfg_default) handle->config_show_summary = cfg_off;
		if (handle->config_show_fail    == cfg_default) handle->config_show_fail = cfg_off;
	}
	else
	{
		if (handle->config_show_summary == cfg_default) handle->config_show_summary = cfg_on;
		if (handle->config_show_fail    == cfg_default) handle->config_show_fail = cfg_on;
		if (handle->config_show_pass    == cfg_default) handle->config_show_pass = cfg_on;
	}
	return 0;
}


void exotic_add_test(struct exotic_handle* handle, exo_test_t func, const char* name)
{
	struct exo_test_data* test;

	if (!handle)
	{
		fprintf(stderr, "exotic_add_test: failed, no handle!\n");
		exit(-1);
	}
	
	test = (struct exo_test_data*) malloc(sizeof(struct exo_test_data));
	if (!test)
	{
		fprintf(stderr, "exotic_add_test: out of memory!\n");
		exit(-1);
	}
	
	/* Create the test */
	memset(test, 0, sizeof(struct exo_test_data));
	test->test = func;
	test->name = strdup(name);
	
	/* Register the test in the handle */
	if (!handle->first)
	{
		handle->first = test;
		handle->current = test;
	}
	else
	{
		handle->current->next = test;
		handle->current = test;
	}
}


int exotic_run(struct exotic_handle* handle)
{
	struct exo_test_data* tmp = NULL;
	
	if (!handle)
	{
		fprintf(stderr, "Error: exotic is not initialized\n");
		return -1;
	}

	handle->current = handle->first;
	while (handle->current)
	{
		tmp = handle->current;
		
		if (handle->current->test()) {
			if (handle->config_show_pass == cfg_on) printf("* PASS test '%s'\n", tmp->name);
			handle->pass++;
		} else {
			if (handle->config_show_fail == cfg_on) printf("* FAIL test '%s'\n", tmp->name);
			handle->fail++;
		}
		
		handle->current = handle->current->next;
		
		free(tmp->name);
		free(tmp);
	}
	
	if (!handle->first)
	{
		printf("(No tests added)\n");
	}
	
	if (handle->config_show_summary == cfg_on)
		exotic_summary(handle);

	return (handle->fail) ? handle->fail : 0;
}


static void exotic_version() {
	printf("exotic 0.4-standalone\n\n");
	printf("Copyright (C) 2007 Jan Vidar Krey, janvidar@extatic.org\n");
	printf("This is free software with ABSOLUTELY NO WARRANTY.\n\n");
}
