diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ab29be8bec3899660ebc4f08a85eba57ee23ea1d..8409e5dcbe4792c074fb71d820f8162eed9fe3f3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,7 +22,17 @@ linux-amd64-tests: before_script: /opt/buildtools/prepare_environment.sh amd64-linux script: - mkdir build - - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest + - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose + + +linux-amd64-tests-clang: + extends: .tests + image: demlabs/amd64/debian-bullseye:linuxbuilder + before_script: /opt/buildtools/prepare_environment.sh amd64-linux + script: + - mkdir build + - cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose + linux-arm32v7-tests: extends: .tests @@ -30,7 +40,15 @@ linux-arm32v7-tests: before_script: /opt/buildtools/prepare_environment.sh arm32v7-linux script: - mkdir build - - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest + - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose + +linux-arm32v7-tests-clang: + extends: .tests + image: demlabs/arm32v7/debian-bullseye:linuxbuilder + before_script: /opt/buildtools/prepare_environment.sh arm32v7-linux + script: + - mkdir build + - cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose linux-arm64v8-tests: extends: .tests @@ -38,7 +56,15 @@ linux-arm64v8-tests: before_script: /opt/buildtools/prepare_environment.sh arm64-linux script: - mkdir build - - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest + - cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose + +linux-arm64v8-tests-clang: + extends: .tests + image: demlabs/arm64v8/debian-bullseye:linuxbuilder + before_script: /opt/buildtools/prepare_environment.sh arm64-linux + script: + - mkdir build + - cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose windows-tests: extends: .tests diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e09be08328f5b06625870b7bb0e7edce1fc9423..14b4ffc9cc4e88398632384998306e9256edf0ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,11 @@ if (INSTALL_SDK) set(INSTALL_DAP_SDK ON) endif() +# problem in /usr/include/linux/netlink.h:99:24: note: expanded from macro 'NLMSG_OK' (nlh)->nlmsg_len <= (len) +if(CMAKE_C_COMPILER MATCHES "clang") + add_compile_options(-Wno-sign-compare) +endif() + if(NOT DEFINED CELLFRAME_MODULES) include (dap-sdk/cmake/OS_Detection.cmake) @@ -45,6 +50,7 @@ else() endif(NOT DAP_INT128_SUPPORT) if (BUILD_CELLFRAME_SDK_TESTS) + enable_testing() add_definitions("-DDAP_LEDGER_TEST") endif() diff --git a/modules/common/CMakeLists.txt b/modules/common/CMakeLists.txt index 1ff2e061d1cf28fbc02baff162a3cd0688f0d8ff..08bba6401c2d7dadbf5acc6222342c9a6592c74b 100644 --- a/modules/common/CMakeLists.txt +++ b/modules/common/CMakeLists.txt @@ -6,6 +6,10 @@ file(GLOB DAP_CHAIN_COMMON_HEADERS include/*.h) add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_COMMON_SRCS} ${DAP_CHAIN_COMMON_HEADERS}) +if(BUILD_CELLFRAME_SDK_TESTS) + add_subdirectory(tests) +endif() + target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_json-c) target_include_directories(${PROJECT_NAME} PUBLIC include/ ) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../dap-sdk/3rdparty/json-c) diff --git a/modules/common/include/dap_chain_datum_tx_in.h b/modules/common/include/dap_chain_datum_tx_in.h index fcc2361c0594d537409972ea244e2eebe88fd661..c9276dcc748bcda0b7fe6a26c444934a161d2263 100644 --- a/modules/common/include/dap_chain_datum_tx_in.h +++ b/modules/common/include/dap_chain_datum_tx_in.h @@ -36,9 +36,9 @@ typedef struct dap_chain_tx_in{ struct { dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash @brief Hash of the previous transaction. 0 for generation TX - uint32_t tx_out_prev_idx; /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX - } header; /// Only header's hash is used for verification -} DAP_ALIGN_PACKED dap_chain_tx_in_t; + uint32_t tx_out_prev_idx DAP_ALIGNED(4); /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX + } DAP_PACKED header; /// Only header's hash is used for verification +} DAP_PACKED dap_chain_tx_in_t; typedef struct dap_chain_tx_used_out_item { dap_chain_hash_fast_t tx_hash_fast; diff --git a/modules/common/include/dap_chain_datum_tx_in_cond.h b/modules/common/include/dap_chain_datum_tx_in_cond.h index cea12feffd03168436d3e39a887bc95be2a2c5b1..d3033d7bc7e9a2ef4215a3bec50557d4ea7c6157 100644 --- a/modules/common/include/dap_chain_datum_tx_in_cond.h +++ b/modules/common/include/dap_chain_datum_tx_in_cond.h @@ -34,9 +34,9 @@ typedef struct dap_chain_tx_in_cond { struct { - dap_chain_tx_item_type_t type :8; /// @param type @brief Transaction item type + dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash @brief Hash of the previous transaction. 0 for generation TX - uint32_t tx_out_prev_idx; /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX - uint32_t receipt_idx; - } header; -} DAP_ALIGN_PACKED dap_chain_tx_in_cond_t; + uint32_t tx_out_prev_idx DAP_ALIGNED(4); /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX + uint32_t receipt_idx DAP_ALIGNED(4); + } DAP_PACKED header; /// Only header's hash is used for verification +} DAP_PACKED dap_chain_tx_in_cond_t; diff --git a/modules/common/include/dap_chain_datum_tx_in_ems.h b/modules/common/include/dap_chain_datum_tx_in_ems.h index f3aa0cfc0cbea2feeec70fe6d52368db142524ef..e9ca91fda6420ac5d6f8f988e5862867f058db54 100644 --- a/modules/common/include/dap_chain_datum_tx_in_ems.h +++ b/modules/common/include/dap_chain_datum_tx_in_ems.h @@ -34,13 +34,12 @@ */ typedef struct dap_chain_tx_in_ems { struct { - dap_chain_tx_item_type_t type; + dap_chain_tx_item_type_t type ; char ticker[DAP_CHAIN_TICKER_SIZE_MAX]; - uint8_t padding; // Padding - dap_chain_id_t token_emission_chain_id; + dap_chain_id_t token_emission_chain_id DAP_ALIGNED(4); dap_hash_fast_t token_emission_hash; - } header; /// Only header's hash is used for verification -} DAP_ALIGN_PACKED dap_chain_tx_in_ems_t; + } DAP_PACKED header; /// Only header's hash is used for verification +} DAP_PACKED dap_chain_tx_in_ems_t; /** diff --git a/modules/common/include/dap_chain_datum_tx_out.h b/modules/common/include/dap_chain_datum_tx_out.h index 19e136671f38df6b4b18bd401262dabaff7440aa..939ea68fe562c61ebc077f789ac4701df1d14b60 100644 --- a/modules/common/include/dap_chain_datum_tx_out.h +++ b/modules/common/include/dap_chain_datum_tx_out.h @@ -35,16 +35,16 @@ typedef struct dap_chain_tx_out_old { struct { dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type - uint64_t value; /// @param value @brief Number of Datoshis ( DAP/10^9 ) to be transfered - } header; /// Only header's hash is used for verification + uint64_t value DAP_ALIGNED(8); /// @param value @brief Number of Datoshis ( DAP/10^9 ) to be transfered + } DAP_PACKED header; /// Only header's hash is used for verification dap_chain_addr_t addr; //// -} DAP_ALIGN_PACKED dap_chain_tx_out_old_t; +} DAP_PACKED dap_chain_tx_out_old_t; //256 typedef struct dap_chain_tx_out { struct { dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type uint256_t value; /// @param value @brief Number of Datoshis ( DAP/10^9 ) to be transfered - } header; + } DAP_PACKED header; /// Only header's hash is used for verification dap_chain_addr_t addr; //// -} DAP_ALIGN_PACKED dap_chain_tx_out_t; +} DAP_PACKED dap_chain_tx_out_t; diff --git a/modules/common/include/dap_chain_datum_tx_out_ext.h b/modules/common/include/dap_chain_datum_tx_out_ext.h index eeece8e4445ab969d040882578357ff769174abb..038c6514bc75b366615ec215f81f528b835c6fb7 100644 --- a/modules/common/include/dap_chain_datum_tx_out_ext.h +++ b/modules/common/include/dap_chain_datum_tx_out_ext.h @@ -32,8 +32,8 @@ typedef struct dap_chain_tx_out_ext{ struct { dap_chain_tx_item_type_t type; // Transaction item type - should be TX_ITEM_TYPE_OUT_EXT - uint256_t value; // Number of Datoshis ( DAP/10^9 ) to be transfered - } header; // Only header's hash is used for verification + uint256_t value; // Number of Datoshis ( DAP/10^8 ) to be transfered + } DAP_PACKED header; // Only header's hash is used for verification dap_chain_addr_t addr; // Address to transfer to const char token[DAP_CHAIN_TICKER_SIZE_MAX]; // Which token is transferred -} DAP_ALIGN_PACKED dap_chain_tx_out_ext_t; +} DAP_PACKED dap_chain_tx_out_ext_t; diff --git a/modules/common/include/dap_chain_datum_tx_pkey.h b/modules/common/include/dap_chain_datum_tx_pkey.h index cfea7b332887388ea590c365cfafff4136e939e1..f2fb8efb6dec0aab02da272e904eadb5ead30a70 100644 --- a/modules/common/include/dap_chain_datum_tx_pkey.h +++ b/modules/common/include/dap_chain_datum_tx_pkey.h @@ -35,8 +35,8 @@ typedef struct dap_chain_tx_pkey{ struct { dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type dap_sign_type_t sig_type; /// Signature type - uint32_t sig_size; /// Signature size - } header; /// Only header's hash is used for verification + uint32_t sig_size DAP_ALIGNED(4); /// Signature size + } DAP_PACKED header; /// Only header's hash is used for verification uint32_t seq_no; /// Sequence number, out of the header so could be changed during reorganization uint8_t pkey[]; /// @param sig @brief raw pkey dat -} DAP_ALIGN_PACKED dap_chain_tx_pkey_t; +} DAP_PACKED dap_chain_tx_pkey_t; diff --git a/modules/common/include/dap_chain_datum_tx_sig.h b/modules/common/include/dap_chain_datum_tx_sig.h index 8d6c4f27aa1f57d1f93a306c12c6c421bd325a09..7b02845b0c54c0508549aea2c65fe2c9ece171f7 100644 --- a/modules/common/include/dap_chain_datum_tx_sig.h +++ b/modules/common/include/dap_chain_datum_tx_sig.h @@ -36,7 +36,7 @@ typedef struct dap_chain_tx_sig{ struct { dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type - uint32_t sig_size; /// Signature size - } header; /// Only header's hash is used for verification + uint32_t sig_size DAP_ALIGNED(4); /// Signature size + } DAP_PACKED header; /// Only header's hash is used for verification uint8_t sig[]; /// @param sig @brief raw signature data -} DAP_ALIGN_PACKED dap_chain_tx_sig_t; +} DAP_PACKED dap_chain_tx_sig_t; diff --git a/modules/common/include/dap_chain_datum_tx_tsd.h b/modules/common/include/dap_chain_datum_tx_tsd.h index 825ce2b953047774404d15560364205d1b66699b..fc78dcd320ea005a7f01ef03cb68615cc840da0b 100644 --- a/modules/common/include/dap_chain_datum_tx_tsd.h +++ b/modules/common/include/dap_chain_datum_tx_tsd.h @@ -8,8 +8,8 @@ typedef struct dap_chain_tx_tsd { struct { dap_chain_tx_item_type_t type; - size_t size; - } header; + uint64_t size DAP_ALIGNED(8); + } DAP_PACKED header; byte_t tsd[]; -} DAP_ALIGN_PACKED dap_chain_tx_tsd_t; +} DAP_PACKED dap_chain_tx_tsd_t; diff --git a/modules/common/tests/CMakeLists.txt b/modules/common/tests/CMakeLists.txt new file mode 100755 index 0000000000000000000000000000000000000000..855a7c35a24a5d0005d07750992bb4bc71f23fc6 --- /dev/null +++ b/modules/common/tests/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.10) + +project(struct-packing-test) + +file(GLOB DAP_CHAIN_TESTS_HEADERS include/*.h) +file(GLOB DAP_CHAIN_TESTS_SRC *.c) + +add_executable(${PROJECT_NAME} ${DAP_CHAIN_TESTS_SRC} ${DAP_CHAIN_TESTS_HEADERS}) + +target_link_libraries(${PROJECT_NAME} dap_test dap_core dap_crypto) + +include_directories(../include) + +if (DARWIN) + target_link_libraries(${PROJECT_NAME} bz2) +endif() + +target_include_directories(${PROJECT_NAME} PUBLIC include) + +add_test( + NAME struct-packing-test + COMMAND struct-packing-test +) diff --git a/modules/common/tests/dap_struct_packing_tests.c b/modules/common/tests/dap_struct_packing_tests.c new file mode 100644 index 0000000000000000000000000000000000000000..168dce8bc8becb2c4684156cb999084e60c1ff7f --- /dev/null +++ b/modules/common/tests/dap_struct_packing_tests.c @@ -0,0 +1,146 @@ +#include "dap_struct_packing_tests.h" +#include "dap_math_ops.h" +#include "dap_chain_datum_tx_out.h" +#include "dap_chain_datum_tx_in_cond.h" +#include "dap_chain_datum_tx_in_ems.h" +#include "dap_chain_datum_tx_in.h" +#include "dap_chain_datum_tx_out_cond.h" +#include "dap_chain_datum_tx_out_ext.h" +#include "dap_chain_datum_tx_pkey.h" +#include "dap_chain_datum_tx_sig.h" +#include "dap_chain_datum_tx_tsd.h" + +DAP_STATIC_INLINE int s_get_delta_addr(const void *a_addr_1, const void *a_addr_2) +{ + return a_addr_2 - a_addr_1; +} + +static int s_chain_tx_in_cond_test() +{ + dap_print_module_name("dap_chain_tx_in_cond_test"); + dap_chain_tx_in_cond_t s = {0}; + dap_assert(sizeof(s) == 44, "size"); + dap_assert(sizeof(s.header) == 44, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.tx_prev_hash) == 1, "header.tx_prev_hash"); + dap_assert(s_get_delta_addr(&s, &s.header.tx_out_prev_idx) == 36, "header.tx_out_prev_idx"); + dap_assert(s_get_delta_addr(&s, &s.header.receipt_idx) == 40, "header.receipt_idx"); + return 0; +} + +static int s_chain_datum_tx_in_ems_test() +{ + dap_print_module_name("dap_chain_datum_tx_in_ems_test"); + dap_chain_tx_in_ems_t s = {0}; + dap_assert(sizeof(s) == 52, "size"); + dap_assert(sizeof(s.header) == 52, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.ticker) == 1, "header.ticker"); + dap_assert(s_get_delta_addr(&s, &s.header.token_emission_chain_id) == 12, "header.tx_out_prev_idx"); + dap_assert(s_get_delta_addr(&s, &s.header.token_emission_hash) == 20, "header.receipt_idx"); + return 0; +} + +static int s_chain_tx_in_test() +{ + dap_print_module_name("dap_chain_tx_in_test"); + dap_chain_tx_in_t s = {0}; + dap_assert(sizeof(s) == 40, "size"); + dap_assert(sizeof(s.header) == 40, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.tx_prev_hash) == 1, "header.tx_prev_hash"); + dap_assert(s_get_delta_addr(&s, &s.header.tx_out_prev_idx) == 36, "header.tx_out_prev_idx"); + return 0; +} + +static int s_chain_tx_out_ext_test() +{ + dap_print_module_name("dap_chain_tx_out_ext_test"); + dap_chain_tx_out_ext_t s = {0}; + dap_assert(sizeof(s) == 120, "size"); + dap_assert(sizeof(s.header) == 33, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.value) == 1, "header.value"); + dap_assert(s_get_delta_addr(&s, &s.addr) == 33, "addr"); + dap_assert(s_get_delta_addr(&s, &s.token) == 110, "token"); + return 0; +} + +static int s_chain_tx_out_test() +{ + dap_print_module_name("dap_chain_tx_out_test"); + dap_chain_tx_out_old_t s_old = {0}; + dap_assert(sizeof(s_old) == 93, "old size"); + dap_assert(sizeof(s_old.header) == 16, "old.header size"); + dap_assert(s_get_delta_addr(&s_old, &s_old.header) == 0, "old.header"); + dap_assert(s_get_delta_addr(&s_old, &s_old.header.type) == 0, "old.header.type"); + dap_assert(s_get_delta_addr(&s_old, &s_old.header.value) == 8, "old.header.value"); + dap_assert(s_get_delta_addr(&s_old, &s_old.addr) == 16, "old.header.addr"); + + + dap_chain_tx_out_t s = {0}; + dap_assert(sizeof(s) == 110, "new size"); + dap_assert(sizeof(s.header) == 33, "new.header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "new.header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "new.header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.value) == 1, "new.header.value"); + dap_assert(s_get_delta_addr(&s, &s.addr) == 33, "new.header.addr"); + return 0; +} + +static int s_chain_tx_pkey_test() +{ + dap_print_module_name("dap_chain_tx_pkey_test"); + dap_chain_tx_pkey_t s = {0}; + dap_assert(sizeof(s) == 16, "size"); + dap_assert(sizeof(s.header) == 12, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.sig_type) == 1, "header.sig_type"); + dap_assert(s_get_delta_addr(&s, &s.header.sig_size) == 8, "header.sig_size"); + dap_assert(s_get_delta_addr(&s, &s.seq_no) == 12, "seq_no"); + dap_assert(s_get_delta_addr(&s, &s.pkey) == 16, "pkey"); + return 0; +} + +static int s_chain_tx_sig_test() +{ + dap_print_module_name("dap_chain_tx_sig_test"); + dap_chain_tx_sig_t s = {0}; + dap_assert(sizeof(s) == 8, "size"); + dap_assert(sizeof(s.header) == 8, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.sig_size) == 4, "header.sig_size"); + dap_assert(s_get_delta_addr(&s, &s.sig) == 8, "sig"); + return 0; +} + +static int s_chain_tx_tsd_test() +{ + dap_print_module_name("dap_chain_tx_sig_test"); + dap_chain_tx_tsd_t s = {0}; + dap_assert(sizeof(s) == 16, "size"); + dap_assert(sizeof(s.header) == 16, "header size"); + dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header"); + dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type"); + dap_assert(s_get_delta_addr(&s, &s.header.size) == 8, "header.size"); + dap_assert(s_get_delta_addr(&s, &s.tsd) == 16, "tsd"); + return 0; +} + +void dap_struct_packing_test_run(void){ + dap_print_module_name("dap_struct_packing"); + s_chain_tx_in_cond_test(); + s_chain_datum_tx_in_ems_test(); + s_chain_tx_in_test(); + s_chain_tx_out_ext_test(); + s_chain_tx_out_test(); + s_chain_tx_pkey_test(); + s_chain_tx_sig_test(); + s_chain_tx_tsd_test(); +} \ No newline at end of file diff --git a/modules/common/tests/include/dap_struct_packing_tests.h b/modules/common/tests/include/dap_struct_packing_tests.h new file mode 100644 index 0000000000000000000000000000000000000000..62b80b50dd950890144c954e7446d22aa44a6ddc --- /dev/null +++ b/modules/common/tests/include/dap_struct_packing_tests.h @@ -0,0 +1,4 @@ +#include "dap_test.h" + +void dap_struct_packing_test_run(void); +//dap_ledger_t *dap_chain_ledger_create_test(); diff --git a/modules/common/tests/main.c b/modules/common/tests/main.c new file mode 100644 index 0000000000000000000000000000000000000000..5ac47ee838756704ecca1908790d98776dd8f503 --- /dev/null +++ b/modules/common/tests/main.c @@ -0,0 +1,6 @@ +#include "dap_struct_packing_tests.h" + +int main(void){ + dap_struct_packing_test_run(); + return 0; +} \ No newline at end of file