/*
 * Copyright (c) 2016 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <ztest.h>
extern void test_mbox_kinit(void);
extern void test_mbox_kdefine(void);
extern void test_enhance_capability(void);
extern void test_define_multi_mbox(void);
extern void test_mbox_put_get_null(void);
extern void test_mbox_put_get_buffer(void);
extern void test_mbox_async_put_get_buffer(void);
extern void test_mbox_async_put_get_block(void);
extern void test_mbox_target_source_thread_buffer(void);
extern void test_mbox_target_source_thread_block(void);
extern void test_mbox_incorrect_receiver_tid(void);
extern void test_mbox_incorrect_transmit_tid(void);
extern void test_mbox_timed_out_mbox_get(void);
extern void test_mbox_block_get_invalid_pool(void);
extern void test_mbox_msg_tid_mismatch(void);
extern void test_mbox_block_get_buff_to_pool(void);
extern void test_mbox_block_get_buff_to_smaller_pool(void);
extern void test_mbox_dispose_size_0_msg(void);
extern void test_mbox_clean_up_tx_pool(void);
extern void test_mbox_async_put_to_waiting_get(void);
extern void test_mbox_get_waiting_put_incorrect_tid(void);
extern void test_mbox_async_multiple_put(void);
extern void test_mbox_multiple_waiting_get(void);
extern void test_mbox_data_get_null(void);
extern void test_mbox_get_put_block_data(void);

/*test case main entry*/
void test_main(void)
{
	ztest_test_suite(mbox_api,
			 ztest_unit_test(test_mbox_kinit),/*keep init first!*/
			 ztest_unit_test(test_mbox_kdefine),
			 ztest_unit_test(test_enhance_capability),
			 ztest_unit_test(test_define_multi_mbox),
			 ztest_unit_test(test_mbox_put_get_null),
			 ztest_unit_test(test_mbox_put_get_buffer),
			 ztest_unit_test(test_mbox_async_put_get_buffer),
			 ztest_unit_test(test_mbox_target_source_thread_buffer),
			 ztest_unit_test(test_mbox_incorrect_receiver_tid),
			 ztest_unit_test(test_mbox_incorrect_transmit_tid),
			 ztest_unit_test(test_mbox_timed_out_mbox_get),
			 ztest_unit_test(test_mbox_msg_tid_mismatch),
			 ztest_unit_test(test_mbox_dispose_size_0_msg),
			 ztest_unit_test(test_mbox_async_put_to_waiting_get),
			 ztest_unit_test(
				test_mbox_get_waiting_put_incorrect_tid),
			 ztest_unit_test(test_mbox_async_multiple_put),
			 ztest_unit_test(test_mbox_data_get_null),
			 ztest_unit_test(test_mbox_get_put_block_data),
			 ztest_unit_test(test_mbox_multiple_waiting_get)
);
	ztest_run_test_suite(mbox_api);
}
