diff --git a/test/contracts/accounts.tz b/src/bin_client/test/contracts/accounts.tz similarity index 100% rename from test/contracts/accounts.tz rename to src/bin_client/test/contracts/accounts.tz diff --git a/test/contracts/add1.tz b/src/bin_client/test/contracts/add1.tz similarity index 100% rename from test/contracts/add1.tz rename to src/bin_client/test/contracts/add1.tz diff --git a/test/contracts/add1_list.tz b/src/bin_client/test/contracts/add1_list.tz similarity index 100% rename from test/contracts/add1_list.tz rename to src/bin_client/test/contracts/add1_list.tz diff --git a/test/contracts/add_delta_timestamp.tz b/src/bin_client/test/contracts/add_delta_timestamp.tz similarity index 100% rename from test/contracts/add_delta_timestamp.tz rename to src/bin_client/test/contracts/add_delta_timestamp.tz diff --git a/test/contracts/add_timestamp_delta.tz b/src/bin_client/test/contracts/add_timestamp_delta.tz similarity index 100% rename from test/contracts/add_timestamp_delta.tz rename to src/bin_client/test/contracts/add_timestamp_delta.tz diff --git a/test/contracts/after_strategy.tz b/src/bin_client/test/contracts/after_strategy.tz similarity index 100% rename from test/contracts/after_strategy.tz rename to src/bin_client/test/contracts/after_strategy.tz diff --git a/test/contracts/always.tz b/src/bin_client/test/contracts/always.tz similarity index 100% rename from test/contracts/always.tz rename to src/bin_client/test/contracts/always.tz diff --git a/test/contracts/and.tz b/src/bin_client/test/contracts/and.tz similarity index 100% rename from test/contracts/and.tz rename to src/bin_client/test/contracts/and.tz diff --git a/test/contracts/append.tz b/src/bin_client/test/contracts/append.tz similarity index 100% rename from test/contracts/append.tz rename to src/bin_client/test/contracts/append.tz diff --git a/test/contracts/assert.tz b/src/bin_client/test/contracts/assert.tz similarity index 100% rename from test/contracts/assert.tz rename to src/bin_client/test/contracts/assert.tz diff --git a/test/contracts/assert_cmpeq.tz b/src/bin_client/test/contracts/assert_cmpeq.tz similarity index 100% rename from test/contracts/assert_cmpeq.tz rename to src/bin_client/test/contracts/assert_cmpeq.tz diff --git a/test/contracts/assert_cmpge.tz b/src/bin_client/test/contracts/assert_cmpge.tz similarity index 100% rename from test/contracts/assert_cmpge.tz rename to src/bin_client/test/contracts/assert_cmpge.tz diff --git a/test/contracts/assert_cmpgt.tz b/src/bin_client/test/contracts/assert_cmpgt.tz similarity index 100% rename from test/contracts/assert_cmpgt.tz rename to src/bin_client/test/contracts/assert_cmpgt.tz diff --git a/test/contracts/assert_cmple.tz b/src/bin_client/test/contracts/assert_cmple.tz similarity index 100% rename from test/contracts/assert_cmple.tz rename to src/bin_client/test/contracts/assert_cmple.tz diff --git a/test/contracts/assert_cmplt.tz b/src/bin_client/test/contracts/assert_cmplt.tz similarity index 100% rename from test/contracts/assert_cmplt.tz rename to src/bin_client/test/contracts/assert_cmplt.tz diff --git a/test/contracts/assert_cmpneq.tz b/src/bin_client/test/contracts/assert_cmpneq.tz similarity index 100% rename from test/contracts/assert_cmpneq.tz rename to src/bin_client/test/contracts/assert_cmpneq.tz diff --git a/test/contracts/assert_eq.tz b/src/bin_client/test/contracts/assert_eq.tz similarity index 100% rename from test/contracts/assert_eq.tz rename to src/bin_client/test/contracts/assert_eq.tz diff --git a/test/contracts/assert_ge.tz b/src/bin_client/test/contracts/assert_ge.tz similarity index 100% rename from test/contracts/assert_ge.tz rename to src/bin_client/test/contracts/assert_ge.tz diff --git a/test/contracts/assert_gt.tz b/src/bin_client/test/contracts/assert_gt.tz similarity index 100% rename from test/contracts/assert_gt.tz rename to src/bin_client/test/contracts/assert_gt.tz diff --git a/test/contracts/assert_le.tz b/src/bin_client/test/contracts/assert_le.tz similarity index 100% rename from test/contracts/assert_le.tz rename to src/bin_client/test/contracts/assert_le.tz diff --git a/test/contracts/assert_lt.tz b/src/bin_client/test/contracts/assert_lt.tz similarity index 100% rename from test/contracts/assert_lt.tz rename to src/bin_client/test/contracts/assert_lt.tz diff --git a/test/contracts/assert_neq.tz b/src/bin_client/test/contracts/assert_neq.tz similarity index 100% rename from test/contracts/assert_neq.tz rename to src/bin_client/test/contracts/assert_neq.tz diff --git a/test/contracts/at_least.tz b/src/bin_client/test/contracts/at_least.tz similarity index 100% rename from test/contracts/at_least.tz rename to src/bin_client/test/contracts/at_least.tz diff --git a/test/contracts/auction.tz b/src/bin_client/test/contracts/auction.tz similarity index 100% rename from test/contracts/auction.tz rename to src/bin_client/test/contracts/auction.tz diff --git a/test/contracts/bad_lockup.tz b/src/bin_client/test/contracts/bad_lockup.tz similarity index 100% rename from test/contracts/bad_lockup.tz rename to src/bin_client/test/contracts/bad_lockup.tz diff --git a/test/contracts/balance.tz b/src/bin_client/test/contracts/balance.tz similarity index 100% rename from test/contracts/balance.tz rename to src/bin_client/test/contracts/balance.tz diff --git a/test/contracts/build_list.tz b/src/bin_client/test/contracts/build_list.tz similarity index 100% rename from test/contracts/build_list.tz rename to src/bin_client/test/contracts/build_list.tz diff --git a/test/contracts/cadr_annotation.tz b/src/bin_client/test/contracts/cadr_annotation.tz similarity index 100% rename from test/contracts/cadr_annotation.tz rename to src/bin_client/test/contracts/cadr_annotation.tz diff --git a/test/contracts/check_signature.tz b/src/bin_client/test/contracts/check_signature.tz similarity index 100% rename from test/contracts/check_signature.tz rename to src/bin_client/test/contracts/check_signature.tz diff --git a/test/contracts/compare.tz b/src/bin_client/test/contracts/compare.tz similarity index 100% rename from test/contracts/compare.tz rename to src/bin_client/test/contracts/compare.tz diff --git a/test/contracts/concat.tz b/src/bin_client/test/contracts/concat.tz similarity index 100% rename from test/contracts/concat.tz rename to src/bin_client/test/contracts/concat.tz diff --git a/test/contracts/concat_hello.tz b/src/bin_client/test/contracts/concat_hello.tz similarity index 100% rename from test/contracts/concat_hello.tz rename to src/bin_client/test/contracts/concat_hello.tz diff --git a/test/contracts/concat_list.tz b/src/bin_client/test/contracts/concat_list.tz similarity index 100% rename from test/contracts/concat_list.tz rename to src/bin_client/test/contracts/concat_list.tz diff --git a/test/contracts/conditionals.tz b/src/bin_client/test/contracts/conditionals.tz similarity index 100% rename from test/contracts/conditionals.tz rename to src/bin_client/test/contracts/conditionals.tz diff --git a/test/contracts/cons_twice.tz b/src/bin_client/test/contracts/cons_twice.tz similarity index 100% rename from test/contracts/cons_twice.tz rename to src/bin_client/test/contracts/cons_twice.tz diff --git a/test/contracts/contains_all.tz b/src/bin_client/test/contracts/contains_all.tz similarity index 100% rename from test/contracts/contains_all.tz rename to src/bin_client/test/contracts/contains_all.tz diff --git a/test/contracts/create_account.tz b/src/bin_client/test/contracts/create_account.tz similarity index 100% rename from test/contracts/create_account.tz rename to src/bin_client/test/contracts/create_account.tz diff --git a/test/contracts/create_add1_lists.tz b/src/bin_client/test/contracts/create_add1_lists.tz similarity index 100% rename from test/contracts/create_add1_lists.tz rename to src/bin_client/test/contracts/create_add1_lists.tz diff --git a/test/contracts/create_contract.tz b/src/bin_client/test/contracts/create_contract.tz similarity index 100% rename from test/contracts/create_contract.tz rename to src/bin_client/test/contracts/create_contract.tz diff --git a/test/contracts/create_contract_literal.tz b/src/bin_client/test/contracts/create_contract_literal.tz similarity index 100% rename from test/contracts/create_contract_literal.tz rename to src/bin_client/test/contracts/create_contract_literal.tz diff --git a/test/contracts/data_publisher.tz b/src/bin_client/test/contracts/data_publisher.tz similarity index 100% rename from test/contracts/data_publisher.tz rename to src/bin_client/test/contracts/data_publisher.tz diff --git a/test/contracts/default_account.tz b/src/bin_client/test/contracts/default_account.tz similarity index 100% rename from test/contracts/default_account.tz rename to src/bin_client/test/contracts/default_account.tz diff --git a/test/contracts/diff_timestamps.tz b/src/bin_client/test/contracts/diff_timestamps.tz similarity index 100% rename from test/contracts/diff_timestamps.tz rename to src/bin_client/test/contracts/diff_timestamps.tz diff --git a/test/contracts/dispatch.tz b/src/bin_client/test/contracts/dispatch.tz similarity index 100% rename from test/contracts/dispatch.tz rename to src/bin_client/test/contracts/dispatch.tz diff --git a/test/contracts/empty.tz b/src/bin_client/test/contracts/empty.tz similarity index 100% rename from test/contracts/empty.tz rename to src/bin_client/test/contracts/empty.tz diff --git a/test/contracts/empty_map.tz b/src/bin_client/test/contracts/empty_map.tz similarity index 100% rename from test/contracts/empty_map.tz rename to src/bin_client/test/contracts/empty_map.tz diff --git a/test/contracts/exec_concat.tz b/src/bin_client/test/contracts/exec_concat.tz similarity index 100% rename from test/contracts/exec_concat.tz rename to src/bin_client/test/contracts/exec_concat.tz diff --git a/test/contracts/fail.tz b/src/bin_client/test/contracts/fail.tz similarity index 100% rename from test/contracts/fail.tz rename to src/bin_client/test/contracts/fail.tz diff --git a/test/contracts/fail_amount.tz b/src/bin_client/test/contracts/fail_amount.tz similarity index 100% rename from test/contracts/fail_amount.tz rename to src/bin_client/test/contracts/fail_amount.tz diff --git a/test/contracts/first.tz b/src/bin_client/test/contracts/first.tz similarity index 100% rename from test/contracts/first.tz rename to src/bin_client/test/contracts/first.tz diff --git a/test/contracts/get_map_value.tz b/src/bin_client/test/contracts/get_map_value.tz similarity index 100% rename from test/contracts/get_map_value.tz rename to src/bin_client/test/contracts/get_map_value.tz diff --git a/test/contracts/hardlimit.tz b/src/bin_client/test/contracts/hardlimit.tz similarity index 100% rename from test/contracts/hardlimit.tz rename to src/bin_client/test/contracts/hardlimit.tz diff --git a/test/contracts/hash_consistency_checker.tz b/src/bin_client/test/contracts/hash_consistency_checker.tz similarity index 100% rename from test/contracts/hash_consistency_checker.tz rename to src/bin_client/test/contracts/hash_consistency_checker.tz diff --git a/test/contracts/hash_key.tz b/src/bin_client/test/contracts/hash_key.tz similarity index 100% rename from test/contracts/hash_key.tz rename to src/bin_client/test/contracts/hash_key.tz diff --git a/test/contracts/hash_string.tz b/src/bin_client/test/contracts/hash_string.tz similarity index 100% rename from test/contracts/hash_string.tz rename to src/bin_client/test/contracts/hash_string.tz diff --git a/test/contracts/id.tz b/src/bin_client/test/contracts/id.tz similarity index 100% rename from test/contracts/id.tz rename to src/bin_client/test/contracts/id.tz diff --git a/test/contracts/if.tz b/src/bin_client/test/contracts/if.tz similarity index 100% rename from test/contracts/if.tz rename to src/bin_client/test/contracts/if.tz diff --git a/test/contracts/if_some.tz b/src/bin_client/test/contracts/if_some.tz similarity index 100% rename from test/contracts/if_some.tz rename to src/bin_client/test/contracts/if_some.tz diff --git a/test/contracts/infinite_loop.tz b/src/bin_client/test/contracts/infinite_loop.tz similarity index 100% rename from test/contracts/infinite_loop.tz rename to src/bin_client/test/contracts/infinite_loop.tz diff --git a/test/contracts/insertion_sort.tz b/src/bin_client/test/contracts/insertion_sort.tz similarity index 100% rename from test/contracts/insertion_sort.tz rename to src/bin_client/test/contracts/insertion_sort.tz diff --git a/test/contracts/int_publisher.tz b/src/bin_client/test/contracts/int_publisher.tz similarity index 100% rename from test/contracts/int_publisher.tz rename to src/bin_client/test/contracts/int_publisher.tz diff --git a/test/contracts/king_of_tez.tz b/src/bin_client/test/contracts/king_of_tez.tz similarity index 100% rename from test/contracts/king_of_tez.tz rename to src/bin_client/test/contracts/king_of_tez.tz diff --git a/test/contracts/list_id.tz b/src/bin_client/test/contracts/list_id.tz similarity index 100% rename from test/contracts/list_id.tz rename to src/bin_client/test/contracts/list_id.tz diff --git a/test/contracts/list_id_map.tz b/src/bin_client/test/contracts/list_id_map.tz similarity index 100% rename from test/contracts/list_id_map.tz rename to src/bin_client/test/contracts/list_id_map.tz diff --git a/test/contracts/list_iter.tz b/src/bin_client/test/contracts/list_iter.tz similarity index 100% rename from test/contracts/list_iter.tz rename to src/bin_client/test/contracts/list_iter.tz diff --git a/test/contracts/list_iter2.tz b/src/bin_client/test/contracts/list_iter2.tz similarity index 100% rename from test/contracts/list_iter2.tz rename to src/bin_client/test/contracts/list_iter2.tz diff --git a/test/contracts/list_map_block.tz b/src/bin_client/test/contracts/list_map_block.tz similarity index 100% rename from test/contracts/list_map_block.tz rename to src/bin_client/test/contracts/list_map_block.tz diff --git a/test/contracts/list_of_transactions.tz b/src/bin_client/test/contracts/list_of_transactions.tz similarity index 100% rename from test/contracts/list_of_transactions.tz rename to src/bin_client/test/contracts/list_of_transactions.tz diff --git a/test/contracts/lockup.tz b/src/bin_client/test/contracts/lockup.tz similarity index 100% rename from test/contracts/lockup.tz rename to src/bin_client/test/contracts/lockup.tz diff --git a/test/contracts/loop_left.tz b/src/bin_client/test/contracts/loop_left.tz similarity index 100% rename from test/contracts/loop_left.tz rename to src/bin_client/test/contracts/loop_left.tz diff --git a/test/contracts/macro_annotations.tz b/src/bin_client/test/contracts/macro_annotations.tz similarity index 100% rename from test/contracts/macro_annotations.tz rename to src/bin_client/test/contracts/macro_annotations.tz diff --git a/test/contracts/map_caddaadr.tz b/src/bin_client/test/contracts/map_caddaadr.tz similarity index 100% rename from test/contracts/map_caddaadr.tz rename to src/bin_client/test/contracts/map_caddaadr.tz diff --git a/test/contracts/map_car.tz b/src/bin_client/test/contracts/map_car.tz similarity index 100% rename from test/contracts/map_car.tz rename to src/bin_client/test/contracts/map_car.tz diff --git a/test/contracts/map_id.tz b/src/bin_client/test/contracts/map_id.tz similarity index 100% rename from test/contracts/map_id.tz rename to src/bin_client/test/contracts/map_id.tz diff --git a/test/contracts/map_iter.tz b/src/bin_client/test/contracts/map_iter.tz similarity index 100% rename from test/contracts/map_iter.tz rename to src/bin_client/test/contracts/map_iter.tz diff --git a/test/contracts/map_size.tz b/src/bin_client/test/contracts/map_size.tz similarity index 100% rename from test/contracts/map_size.tz rename to src/bin_client/test/contracts/map_size.tz diff --git a/test/contracts/max_in_list.tz b/src/bin_client/test/contracts/max_in_list.tz similarity index 100% rename from test/contracts/max_in_list.tz rename to src/bin_client/test/contracts/max_in_list.tz diff --git a/test/contracts/min.tz b/src/bin_client/test/contracts/min.tz similarity index 100% rename from test/contracts/min.tz rename to src/bin_client/test/contracts/min.tz diff --git a/test/contracts/noop.tz b/src/bin_client/test/contracts/noop.tz similarity index 100% rename from test/contracts/noop.tz rename to src/bin_client/test/contracts/noop.tz diff --git a/test/contracts/not.tz b/src/bin_client/test/contracts/not.tz similarity index 100% rename from test/contracts/not.tz rename to src/bin_client/test/contracts/not.tz diff --git a/test/contracts/or.tz b/src/bin_client/test/contracts/or.tz similarity index 100% rename from test/contracts/or.tz rename to src/bin_client/test/contracts/or.tz diff --git a/test/contracts/originator.tz b/src/bin_client/test/contracts/originator.tz similarity index 100% rename from test/contracts/originator.tz rename to src/bin_client/test/contracts/originator.tz diff --git a/test/contracts/pair_id.tz b/src/bin_client/test/contracts/pair_id.tz similarity index 100% rename from test/contracts/pair_id.tz rename to src/bin_client/test/contracts/pair_id.tz diff --git a/test/contracts/pair_macro.tz b/src/bin_client/test/contracts/pair_macro.tz similarity index 100% rename from test/contracts/pair_macro.tz rename to src/bin_client/test/contracts/pair_macro.tz diff --git a/test/contracts/parameterizable_payments.tz b/src/bin_client/test/contracts/parameterizable_payments.tz similarity index 100% rename from test/contracts/parameterizable_payments.tz rename to src/bin_client/test/contracts/parameterizable_payments.tz diff --git a/test/contracts/parameterized_multisig.tz b/src/bin_client/test/contracts/parameterized_multisig.tz similarity index 100% rename from test/contracts/parameterized_multisig.tz rename to src/bin_client/test/contracts/parameterized_multisig.tz diff --git a/test/contracts/publisher_payouts.tz b/src/bin_client/test/contracts/publisher_payouts.tz similarity index 100% rename from test/contracts/publisher_payouts.tz rename to src/bin_client/test/contracts/publisher_payouts.tz diff --git a/test/contracts/queue.tz b/src/bin_client/test/contracts/queue.tz similarity index 100% rename from test/contracts/queue.tz rename to src/bin_client/test/contracts/queue.tz diff --git a/test/contracts/reduce_map.tz b/src/bin_client/test/contracts/reduce_map.tz similarity index 100% rename from test/contracts/reduce_map.tz rename to src/bin_client/test/contracts/reduce_map.tz diff --git a/test/contracts/reentrancy.tz b/src/bin_client/test/contracts/reentrancy.tz similarity index 100% rename from test/contracts/reentrancy.tz rename to src/bin_client/test/contracts/reentrancy.tz diff --git a/test/contracts/ret_int.tz b/src/bin_client/test/contracts/ret_int.tz similarity index 100% rename from test/contracts/ret_int.tz rename to src/bin_client/test/contracts/ret_int.tz diff --git a/test/contracts/reverse.tz b/src/bin_client/test/contracts/reverse.tz similarity index 100% rename from test/contracts/reverse.tz rename to src/bin_client/test/contracts/reverse.tz diff --git a/test/contracts/reverse_loop.tz b/src/bin_client/test/contracts/reverse_loop.tz similarity index 100% rename from test/contracts/reverse_loop.tz rename to src/bin_client/test/contracts/reverse_loop.tz diff --git a/test/contracts/self.tz b/src/bin_client/test/contracts/self.tz similarity index 100% rename from test/contracts/self.tz rename to src/bin_client/test/contracts/self.tz diff --git a/test/contracts/set_caddaadr.tz b/src/bin_client/test/contracts/set_caddaadr.tz similarity index 100% rename from test/contracts/set_caddaadr.tz rename to src/bin_client/test/contracts/set_caddaadr.tz diff --git a/test/contracts/set_car.tz b/src/bin_client/test/contracts/set_car.tz similarity index 100% rename from test/contracts/set_car.tz rename to src/bin_client/test/contracts/set_car.tz diff --git a/test/contracts/set_cdr.tz b/src/bin_client/test/contracts/set_cdr.tz similarity index 100% rename from test/contracts/set_cdr.tz rename to src/bin_client/test/contracts/set_cdr.tz diff --git a/test/contracts/set_id.tz b/src/bin_client/test/contracts/set_id.tz similarity index 100% rename from test/contracts/set_id.tz rename to src/bin_client/test/contracts/set_id.tz diff --git a/test/contracts/set_iter.tz b/src/bin_client/test/contracts/set_iter.tz similarity index 100% rename from test/contracts/set_iter.tz rename to src/bin_client/test/contracts/set_iter.tz diff --git a/test/contracts/set_member.tz b/src/bin_client/test/contracts/set_member.tz similarity index 100% rename from test/contracts/set_member.tz rename to src/bin_client/test/contracts/set_member.tz diff --git a/test/contracts/set_size.tz b/src/bin_client/test/contracts/set_size.tz similarity index 100% rename from test/contracts/set_size.tz rename to src/bin_client/test/contracts/set_size.tz diff --git a/test/contracts/spawn_identities.tz b/src/bin_client/test/contracts/spawn_identities.tz similarity index 100% rename from test/contracts/spawn_identities.tz rename to src/bin_client/test/contracts/spawn_identities.tz diff --git a/test/contracts/steps_to_quota.tz b/src/bin_client/test/contracts/steps_to_quota.tz similarity index 100% rename from test/contracts/steps_to_quota.tz rename to src/bin_client/test/contracts/steps_to_quota.tz diff --git a/test/contracts/store_input.tz b/src/bin_client/test/contracts/store_input.tz similarity index 100% rename from test/contracts/store_input.tz rename to src/bin_client/test/contracts/store_input.tz diff --git a/test/contracts/store_now.tz b/src/bin_client/test/contracts/store_now.tz similarity index 100% rename from test/contracts/store_now.tz rename to src/bin_client/test/contracts/store_now.tz diff --git a/test/contracts/str_id.tz b/src/bin_client/test/contracts/str_id.tz similarity index 100% rename from test/contracts/str_id.tz rename to src/bin_client/test/contracts/str_id.tz diff --git a/test/contracts/strategy_proxy.tz b/src/bin_client/test/contracts/strategy_proxy.tz similarity index 100% rename from test/contracts/strategy_proxy.tz rename to src/bin_client/test/contracts/strategy_proxy.tz diff --git a/test/contracts/sub_timestamp_delta.tz b/src/bin_client/test/contracts/sub_timestamp_delta.tz similarity index 100% rename from test/contracts/sub_timestamp_delta.tz rename to src/bin_client/test/contracts/sub_timestamp_delta.tz diff --git a/test/contracts/subset.tz b/src/bin_client/test/contracts/subset.tz similarity index 100% rename from test/contracts/subset.tz rename to src/bin_client/test/contracts/subset.tz diff --git a/test/contracts/swap_left_right.tz b/src/bin_client/test/contracts/swap_left_right.tz similarity index 100% rename from test/contracts/swap_left_right.tz rename to src/bin_client/test/contracts/swap_left_right.tz diff --git a/test/contracts/swap_storage_input.tz b/src/bin_client/test/contracts/swap_storage_input.tz similarity index 100% rename from test/contracts/swap_storage_input.tz rename to src/bin_client/test/contracts/swap_storage_input.tz diff --git a/test/contracts/swap_storage_input_dip.tz b/src/bin_client/test/contracts/swap_storage_input_dip.tz similarity index 100% rename from test/contracts/swap_storage_input_dip.tz rename to src/bin_client/test/contracts/swap_storage_input_dip.tz diff --git a/test/contracts/take_my_money.tz b/src/bin_client/test/contracts/take_my_money.tz similarity index 100% rename from test/contracts/take_my_money.tz rename to src/bin_client/test/contracts/take_my_money.tz diff --git a/test/contracts/tez_add_sub.tz b/src/bin_client/test/contracts/tez_add_sub.tz similarity index 100% rename from test/contracts/tez_add_sub.tz rename to src/bin_client/test/contracts/tez_add_sub.tz diff --git a/test/contracts/transfer_amount.tz b/src/bin_client/test/contracts/transfer_amount.tz similarity index 100% rename from test/contracts/transfer_amount.tz rename to src/bin_client/test/contracts/transfer_amount.tz diff --git a/test/contracts/transfer_to.tz b/src/bin_client/test/contracts/transfer_to.tz similarity index 100% rename from test/contracts/transfer_to.tz rename to src/bin_client/test/contracts/transfer_to.tz diff --git a/test/contracts/two_vulnerabilities.tz b/src/bin_client/test/contracts/two_vulnerabilities.tz similarity index 100% rename from test/contracts/two_vulnerabilities.tz rename to src/bin_client/test/contracts/two_vulnerabilities.tz diff --git a/test/contracts/unpair_macro.tz b/src/bin_client/test/contracts/unpair_macro.tz similarity index 100% rename from test/contracts/unpair_macro.tz rename to src/bin_client/test/contracts/unpair_macro.tz diff --git a/test/contracts/weather_insurance.tz b/src/bin_client/test/contracts/weather_insurance.tz similarity index 100% rename from test/contracts/weather_insurance.tz rename to src/bin_client/test/contracts/weather_insurance.tz diff --git a/test/contracts/xor.tz b/src/bin_client/test/contracts/xor.tz similarity index 100% rename from test/contracts/xor.tz rename to src/bin_client/test/contracts/xor.tz diff --git a/test/jbuild b/src/bin_client/test/jbuild similarity index 97% rename from test/jbuild rename to src/bin_client/test/jbuild index e0b4e144e..22a5811af 100644 --- a/test/jbuild +++ b/src/bin_client/test/jbuild @@ -34,7 +34,7 @@ ((name runtest_multinode.sh) (deps (sandbox.json test_lib.inc.sh - (glob_files contracts/*) + (glob_files contracts/*.tz) )) (locks (/tcp-port/18731 /tcp-port/18732 /tcp-port/18733 /tcp-port/18734 /tcp-port/18735 /tcp-port/18736 /tcp-port/18737 /tcp-port/18738 diff --git a/test/sandbox.json b/src/bin_client/test/sandbox.json similarity index 100% rename from test/sandbox.json rename to src/bin_client/test/sandbox.json diff --git a/test/test_basic.sh b/src/bin_client/test/test_basic.sh similarity index 100% rename from test/test_basic.sh rename to src/bin_client/test/test_basic.sh diff --git a/src/bin_client/test/test_contracts.sh b/src/bin_client/test/test_contracts.sh new file mode 100755 index 000000000..1c65d9295 --- /dev/null +++ b/src/bin_client/test/test_contracts.sh @@ -0,0 +1,425 @@ +#!/bin/bash + +set -e +set -o pipefail + +test_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)")" +source $test_dir/test_lib.inc.sh "$@" + +start_node 1 +activate_alpha + +sleep 2 +$client bake for bootstrap5 -max-priority 512 + +key1=foo +key2=bar + +$client gen keys $key1 +$client gen keys $key2 + +printf "\n\n" + +# Assert all contracts typecheck +if [ ! $NO_TYPECHECK ] ; then + for contract in `ls $contract_dir/*.tz`; do + printf "[Typechecking %s]\n" "$contract"; + ${client} typecheck program "$contract"; + done + printf "All contracts are well typed\n\n" +fi + +# FORMAT: assert_output contract_file storage input expected_result + +assert_output $contract_dir/ret_int.tz Unit Unit 300 + +# Identity on strings +assert_output $contract_dir/str_id.tz Unit '"Hello"' '"Hello"' +assert_output $contract_dir/str_id.tz Unit '"abcd"' '"abcd"' + +# Identity on pairs +assert_output $contract_dir/pair_id.tz Unit '(Pair True False)' '(Pair True False)' +assert_output $contract_dir/pair_id.tz Unit '(Pair False True)' '(Pair False True)' +assert_output $contract_dir/pair_id.tz Unit '(Pair True True)' '(Pair True True)' +assert_output $contract_dir/pair_id.tz Unit '(Pair False False)' '(Pair False False)' + +# Logical not +assert_output $contract_dir/not.tz Unit True False +assert_output $contract_dir/not.tz Unit False True + +# Logical and +assert_output $contract_dir/and.tz Unit "(Pair False False)" False +assert_output $contract_dir/and.tz Unit "(Pair False True)" False +assert_output $contract_dir/and.tz Unit "(Pair True False)" False +assert_output $contract_dir/and.tz Unit "(Pair True True)" True + +# Logical or +assert_output $contract_dir/or.tz Unit "(Pair False False)" False +assert_output $contract_dir/or.tz Unit "(Pair False True)" True +assert_output $contract_dir/or.tz Unit "(Pair True False)" True +assert_output $contract_dir/or.tz Unit "(Pair True True)" True + +# XOR +assert_output $contract_dir/xor.tz Unit "(Pair False False)" False +assert_output $contract_dir/xor.tz Unit "(Pair False True)" True +assert_output $contract_dir/xor.tz Unit "(Pair True False)" True +assert_output $contract_dir/xor.tz Unit "(Pair True True)" False + + +# Build list +assert_output $contract_dir/build_list.tz Unit 0 "{ 0 }" +assert_output $contract_dir/build_list.tz Unit 3 "{ 0 ; 1 ; 2 ; 3 }" +assert_output $contract_dir/build_list.tz Unit 10 \ + "{ 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10 }" + +# Concatenate all strings of a list into one string +assert_output $contract_dir/concat_list.tz Unit '{ "a" ; "b" ; "c" }' '"abc"' +assert_output $contract_dir/concat_list.tz Unit '{}' '""' +assert_output $contract_dir/concat_list.tz \ + Unit '{ "Hello" ; " " ; "World" ; "!" }' '"Hello World!"' + +# Find maximum int in list -- returns None if not found +assert_output $contract_dir/max_in_list.tz Unit '{}' 'None' +assert_output $contract_dir/max_in_list.tz Unit '{ 1 }' '(Some 1)' +assert_output $contract_dir/max_in_list.tz Unit '{ -1 }' '(Some -1)' +assert_output $contract_dir/max_in_list.tz Unit \ + '{ 10 ; -1 ; -20 ; 100 ; 0 }' '(Some 100)' +assert_output $contract_dir/max_in_list.tz Unit \ + '{ 10 ; -1 ; -20 ; 100 ; 0 }' '(Some 100)' +assert_output $contract_dir/max_in_list.tz Unit \ + '{ -10 ; -1 ; -20 ; -100 }' '(Some -1)' + +# Identity on lists +assert_output $contract_dir/list_id.tz Unit '{ "1" ; "2" ; "3" }' '{ "1" ; "2" ; "3" }' +assert_output $contract_dir/list_id.tz Unit '{}' '{}' +assert_output $contract_dir/list_id.tz Unit '{ "a" ; "b" ; "c" }' '{ "a" ; "b" ; "c" }' + +assert_output $contract_dir/list_id_map.tz Unit '{ "1" ; "2" ; "3" }' '{ "1" ; "2" ; "3" }' +assert_output $contract_dir/list_id_map.tz Unit '{}' '{}' +assert_output $contract_dir/list_id_map.tz Unit '{ "a" ; "b" ; "c" }' '{ "a" ; "b" ; "c" }' + + +# Identity on maps +assert_output $contract_dir/map_id.tz Unit '{ Elt 0 1 }' '{ Elt 0 1 }' +assert_output $contract_dir/map_id.tz Unit '{ Elt 0 0 }' '{ Elt 0 0 }' +assert_output $contract_dir/map_id.tz Unit '{ Elt 0 0 ; Elt 3 4 }' '{ Elt 0 0 ; Elt 3 4 }' + +# Map block on lists +assert_output $contract_dir/list_map_block.tz Unit '{}' '{}' +assert_output $contract_dir/list_map_block.tz Unit '{ 1 ; 1 ; 1 ; 1 }' '{ 1 ; 2 ; 3 ; 4 }' +assert_output $contract_dir/list_map_block.tz Unit '{ 1 ; 2 ; 3 ; 0 }' '{ 1 ; 3 ; 5 ; 3 }' + +# List iter +assert_output $contract_dir/list_iter.tz Unit '{ 10 ; 2 ; 1 }' 20 +assert_output $contract_dir/list_iter.tz Unit '{ 3 ; 6 ; 9 }' 162 + +assert_output $contract_dir/list_iter2.tz Unit '{ "a" ; "b" ; "c" }' '"cba"' +assert_output $contract_dir/list_iter2.tz Unit '{}' '""' + + +# Identity on sets +assert_output $contract_dir/set_id.tz Unit '{ "a" ; "b" ; "c" }' '{ "a" ; "b" ; "c" }' +assert_output $contract_dir/set_id.tz Unit '{}' '{}' +assert_output $contract_dir/set_id.tz Unit '{ "asdf" ; "bcde" }' '{ "asdf" ; "bcde" }' + +# Set member -- set is in storage +assert_output $contract_dir/set_member.tz '{}' '"Hi"' 'False' +assert_output $contract_dir/set_member.tz '{ "Hi" }' '"Hi"' 'True' +assert_output $contract_dir/set_member.tz '{ "Hello" ; "World" }' '""' 'False' + +# Set size +assert_output $contract_dir/set_size.tz Unit '{}' 0 +assert_output $contract_dir/set_size.tz Unit '{ 1 }' 1 +assert_output $contract_dir/set_size.tz Unit '{ 1 ; 2 ; 3 }' 3 +assert_output $contract_dir/set_size.tz Unit '{ 1 ; 2 ; 3 ; 4 ; 5 ; 6 }' 6 + +# Set iter +assert_output $contract_dir/set_iter.tz Unit '{}' 0 +assert_output $contract_dir/set_iter.tz Unit '{ 1 }' 1 +assert_output $contract_dir/set_iter.tz Unit '{ -100 ; 1 ; 2 ; 3 }' '-94' + +# Map size +assert_output $contract_dir/map_size.tz Unit '{}' 0 +assert_output $contract_dir/map_size.tz Unit '{ Elt "a" 1 }' 1 +assert_output $contract_dir/map_size.tz Unit \ + '{ Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 }' 3 +assert_output $contract_dir/map_size.tz Unit \ + '{ Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 ; Elt "d" 4 ; Elt "e" 5 ; Elt "f" 6 }' 6 + +# Contains all elements -- does the second list contain all of the same elements +# as the first one? I'm ignoring element multiplicity +assert_output $contract_dir/contains_all.tz \ + Unit '(Pair {} {})' 'True' +assert_output $contract_dir/contains_all.tz \ + Unit '(Pair { "a" } { "B" })' 'False' +assert_output $contract_dir/contains_all.tz \ + Unit '(Pair { "A" } { "B" })' 'False' +assert_output $contract_dir/contains_all.tz \ + Unit '(Pair { "B" } { "B" })' 'True' +assert_output $contract_dir/contains_all.tz Unit \ + '(Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" })' 'True' +assert_output $contract_dir/contains_all.tz Unit \ + '(Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" })' 'True' + +# Concatenate the string in storage with all strings in the given list +assert_output $contract_dir/concat_hello.tz Unit \ + '{ "World!" }' '{ "Hello World!" }' +assert_output $contract_dir/concat_hello.tz Unit \ + '{}' '{}' +assert_output $contract_dir/concat_hello.tz Unit \ + '{ "test1" ; "test2" }' '{ "Hello test1" ; "Hello test2" }' + +# Create an empty map and add a string to it +assert_output $contract_dir/empty_map.tz Unit Unit \ + '{ Elt "hello" "world" }' + +# Get the value stored at the given key in the map +assert_output $contract_dir/get_map_value.tz '{ Elt "hello" "hi" }' \ + '"hello"' '(Some "hi")' +assert_output $contract_dir/get_map_value.tz '{ Elt "hello" "hi" }' \ + '""' 'None' +assert_output $contract_dir/get_map_value.tz \ + '{ Elt "1" "one" ; Elt "2" "two" }' \ + '"1"' '(Some "one")' + +# Map iter +assert_output $contract_dir/map_iter.tz Unit '{ Elt 0 100 ; Elt 2 100 }' '(Pair 2 200)' +assert_output $contract_dir/map_iter.tz Unit '{ Elt 1 1 ; Elt 2 100 }' '(Pair 3 101)' + +# Return True if True branch of if was taken and False otherwise +assert_output $contract_dir/if.tz Unit True True +assert_output $contract_dir/if.tz Unit False False + +# Generate a pair of or types +assert_output $contract_dir/swap_left_right.tz Unit '(Left True)' '(Right True)' +assert_output $contract_dir/swap_left_right.tz Unit '(Right "a")' '(Left "a")' + +# Reverse a list +assert_output $contract_dir/reverse.tz Unit '{}' '{}' +assert_output $contract_dir/reverse.tz Unit '{ "c" ; "b" ; "a" }' '{ "a" ; "b" ; "c" }' +assert_output $contract_dir/reverse_loop.tz Unit '{}' '{}' +assert_output $contract_dir/reverse_loop.tz Unit '{ "c" ; "b" ; "a" }' '{ "a" ; "b" ; "c" }' + +# Reverse using LOOP_LEFT +assert_output $contract_dir/loop_left.tz Unit '{}' '{}' +assert_output $contract_dir/loop_left.tz Unit '{ "c" ; "b" ; "a" }' '{ "a" ; "b" ; "c" }' + +# Exec concat contract +assert_output $contract_dir/exec_concat.tz Unit '""' '"_abc"' +assert_output $contract_dir/exec_concat.tz Unit '"test"' '"test_abc"' + +# Get current steps to quota +assert_output $contract_dir/steps_to_quota.tz Unit Unit 39991 + +# Get the current balance of the contract +assert_output $contract_dir/balance.tz Unit Unit '"4,000,000"' + +# Test comparisons on tez { EQ ; GT ; LT ; GE ; LE } +assert_output $contract_dir/compare.tz Unit '(Pair "1.00" "2.00")' '{ False ; False ; True ; False ; True }' +assert_output $contract_dir/compare.tz Unit '(Pair "2.00" "1.00")' '{ False ; True ; False ; True ; False }' +assert_output $contract_dir/compare.tz Unit '(Pair "2.37" "2.37")' '{ True ; False ; False ; True ; True }' + +# Test addition and subtraction on tez +assert_output $contract_dir/tez_add_sub.tz Unit '(Pair "2" "1")' '(Pair "3" "1")' +assert_output $contract_dir/tez_add_sub.tz Unit '(Pair "2.31" "1.01")' '(Pair "3.32" "1.3")' + +# Test get first element of list +assert_output $contract_dir/first.tz Unit '{ 1 ; 2 ; 3 ; 4 }' '1' +assert_output $contract_dir/first.tz Unit '{ 4 }' '4' + +# Hash input string +# Test assumed to be correct -- hash is based on encoding of AST +assert_output $contract_dir/hash_string.tz Unit '"abcdefg"' '"exprv3MnhXvjthGzZ7jDtXRRFremZyey9rsGtL7JRkeaQX1fThN7WF"' +assert_output $contract_dir/hash_string.tz Unit '"12345"' '"expru81QVHsW2qaWLNHnMHSxDNhqtat17ajadri6mKUvXyc2EWHZC3"' + +# Test ASSERT +assert_output $contract_dir/assert.tz Unit True Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert.tz on storage Unit and input False + +# COMPARE; ASSERT_ +assert_output $contract_dir/assert_eq.tz Unit '(Pair -1 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_eq.tz on storage Unit and input '(Pair 0 -1)' + +assert_output $contract_dir/assert_eq.tz Unit '(Pair -1 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_eq.tz on storage Unit and input '(Pair 0 -1)' + +assert_output $contract_dir/assert_neq.tz Unit '(Pair 0 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_neq.tz on storage Unit and input '(Pair -1 -1)' + +assert_output $contract_dir/assert_lt.tz Unit '(Pair -1 0)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_lt.tz on storage Unit and input '(Pair 0 -1)' +assert_fails ${TZCLIENT} run program $contract_dir/assert_lt.tz on storage Unit and input '(Pair 0 0)' + +assert_output $contract_dir/assert_le.tz Unit '(Pair 0 0)' Unit +assert_output $contract_dir/assert_le.tz Unit '(Pair -1 0)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_le.tz on storage Unit and input '(Pair 0 -1)' + +assert_output $contract_dir/assert_gt.tz Unit '(Pair 0 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_gt.tz on storage Unit and input '(Pair -1 0)' +assert_fails ${TZCLIENT} run program $contract_dir/assert_gt.tz on storage Unit and input '(Pair 0 0)' + +assert_output $contract_dir/assert_ge.tz Unit '(Pair 0 0)' Unit +assert_output $contract_dir/assert_ge.tz Unit '(Pair 0 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_ge.tz on storage Unit and input '(Pair -1 0)' + +# ASSERT_CMP +assert_output $contract_dir/assert_cmpeq.tz Unit '(Pair -1 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmpeq.tz on storage Unit and input '(Pair 0 -1)' + +assert_output $contract_dir/assert_cmpeq.tz Unit '(Pair -1 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmpeq.tz on storage Unit and input '(Pair 0 -1)' + +assert_output $contract_dir/assert_cmpneq.tz Unit '(Pair 0 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmpneq.tz on storage Unit and input '(Pair -1 -1)' + +assert_output $contract_dir/assert_cmplt.tz Unit '(Pair -1 0)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmplt.tz on storage Unit and input '(Pair 0 -1)' +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmplt.tz on storage Unit and input '(Pair 0 0)' + +assert_output $contract_dir/assert_cmple.tz Unit '(Pair 0 0)' Unit +assert_output $contract_dir/assert_cmple.tz Unit '(Pair -1 0)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmple.tz on storage Unit and input '(Pair 0 -1)' + +assert_output $contract_dir/assert_cmpgt.tz Unit '(Pair 0 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmpgt.tz on storage Unit and input '(Pair -1 0)' +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmpgt.tz on storage Unit and input '(Pair 0 0)' + +assert_output $contract_dir/assert_cmpge.tz Unit '(Pair 0 0)' Unit +assert_output $contract_dir/assert_cmpge.tz Unit '(Pair 0 -1)' Unit +assert_fails ${TZCLIENT} run program $contract_dir/assert_cmpge.tz on storage Unit and input '(Pair -1 0)' + +# IF_SOME +assert_output $contract_dir/if_some.tz Unit '(Some "hello")' '"hello"' +assert_output $contract_dir/if_some.tz Unit 'None' '""' + +# Tests the SET_CAR and SET_CDR instructions +assert_output $contract_dir/set_car.tz '(Pair "hello" 0)' '"world"' '(Pair "world" 0)' +assert_output $contract_dir/set_car.tz '(Pair "hello" 0)' '"abc"' '(Pair "abc" 0)' +assert_output $contract_dir/set_car.tz '(Pair "hello" 0)' '""' '(Pair "" 0)' + +assert_output $contract_dir/set_cdr.tz '(Pair "hello" 0)' '1' '(Pair "hello" 1)' +assert_output $contract_dir/set_cdr.tz '(Pair "hello" 500)' '3' '(Pair "hello" 3)' +assert_output $contract_dir/set_cdr.tz '(Pair "hello" 7)' '100' '(Pair "hello" 100)' + +assert_storage $contract_dir/set_caddaadr.tz \ +'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "0") 4) 5))) 6)' \ +'"3"' \ +'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "3") 4) 5))) 6)' + +assert_storage $contract_dir/map_caddaadr.tz \ +'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "0") 4) 5))) 6)' \ +'Unit' \ +'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "1") 4) 5))) 6)' + +# Did the given key sign the string? (key is bootstrap1) +assert_output $contract_dir/check_signature.tz \ +'(Pair "26981d372a7b3866621bf79713d249197fe6d518ef702fa65738e1715bde9da54df04fefbcc84287ecaa9f74ad9296462731aa24bbcece63c6bf73a8f5752309" "hello")' \ +'"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' True + +assert_output $contract_dir/check_signature.tz \ +'(Pair "26981d372a7b3866621bf79713d249197fe6d518ef702fa65738e1715bde9da54df04fefbcc84287ecaa9f74ad9296462731aa24bbcece63c6bf73a8f5752309" "abcd")' \ +'"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' False + +# Convert a public key to a public key hash +assert_output $contract_dir/hash_key.tz Unit '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' +assert_output $contract_dir/hash_key.tz Unit '"edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES"' '"tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k"' + +$client transfer 1,000 from bootstrap1 to $key1 +$client transfer 2,000 from bootstrap1 to $key2 + +assert_balance $key1 "1,000 ꜩ" +assert_balance $key2 "2,000 ꜩ" + +# Create a contract and transfer 100 ꜩ to it +init_with_transfer $contract_dir/store_input.tz $key1 '""' 100 bootstrap1 +$client transfer 100 from bootstrap1 to store_input -arg '"abcdefg"' +assert_balance store_input "200 ꜩ" +assert_storage_contains store_input '"abcdefg"' +$client transfer 100 from bootstrap1 to store_input -arg '"xyz"' +assert_storage_contains store_input '"xyz"' + +init_with_transfer $contract_dir/transfer_amount.tz $key1 '"0"' "100" bootstrap1 +$client transfer 500 from bootstrap1 to transfer_amount -arg Unit +assert_storage_contains transfer_amount 500 + +# This tests the `NOW` instruction. +# This test may fail if timings are marginal, though I have not yet seen this happen +init_with_transfer $contract_dir/store_now.tz $key1 '"2017-07-13T09:19:01Z"' "100" bootstrap1 +$client transfer 500 from bootstrap1 to store_now -arg Unit +assert_storage_contains store_now "$($client get timestamp)" + +# Test timestamp operations +assert_output $contract_dir/add_timestamp_delta.tz Unit '(Pair 100 100)' '"1970-01-01T00:03:20Z"' +assert_output $contract_dir/add_timestamp_delta.tz Unit '(Pair 100 -100)' '"1970-01-01T00:00:00Z"' +assert_output $contract_dir/add_timestamp_delta.tz Unit '(Pair "1970-01-01T00:00:00Z" 0)' '"1970-01-01T00:00:00Z"' + +assert_output $contract_dir/add_delta_timestamp.tz Unit '(Pair 100 100)' '"1970-01-01T00:03:20Z"' +assert_output $contract_dir/add_delta_timestamp.tz Unit '(Pair -100 100)' '"1970-01-01T00:00:00Z"' +assert_output $contract_dir/add_delta_timestamp.tz Unit '(Pair 0 "1970-01-01T00:00:00Z")' '"1970-01-01T00:00:00Z"' + +assert_output $contract_dir/sub_timestamp_delta.tz Unit '(Pair 100 100)' '"1970-01-01T00:00:00Z"' +assert_output $contract_dir/sub_timestamp_delta.tz Unit '(Pair 100 -100)' '"1970-01-01T00:03:20Z"' +assert_output $contract_dir/sub_timestamp_delta.tz Unit '(Pair 100 2000000000000000000)' -1999999999999999900 + +assert_output $contract_dir/diff_timestamps.tz Unit '(Pair 0 0)' 0 +assert_output $contract_dir/diff_timestamps.tz Unit '(Pair 0 1)' -1 +assert_output $contract_dir/diff_timestamps.tz Unit '(Pair 1 0)' 1 +assert_output $contract_dir/diff_timestamps.tz Unit '(Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z")' 200 + +# Tests TRANSFER_TO +$client originate account "test_transfer_account1" for $key1 transferring 100 from bootstrap1 +$client originate account "test_transfer_account2" for $key1 transferring 20 from bootstrap1 +init_with_transfer $contract_dir/transfer_to.tz $key2 Unit 1,000 bootstrap1 +assert_balance test_transfer_account1 "100 ꜩ" +$client transfer 100 from bootstrap1 to transfer_to \ + -arg "\"$(get_contract_addr test_transfer_account1)\"" +assert_balance test_transfer_account1 "200 ꜩ" # Why isn't this 200 ꜩ? Baking fee? +$client transfer 100 from bootstrap1 to transfer_to \ + -arg "\"$(get_contract_addr test_transfer_account2)\"" +assert_balance test_transfer_account2 "120 ꜩ" # Why isn't this 120 ꜩ? Baking fee? + +# Tests create_account +init_with_transfer $contract_dir/create_account.tz $key2 \ + "\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1 +$client transfer 100 from bootstrap1 to create_account \ + -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' | assert_in_output "New contract" + +# Creates a contract, transfers data to it and stores the data +init_with_transfer $contract_dir/create_contract.tz $key2 \ + "\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1 +$client transfer 0 from bootstrap1 to create_contract -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' +assert_storage_contains create_contract '"abcdefg"' + +# Test DEFAULT_ACCOUNT +init_with_transfer $contract_dir/default_account.tz $key1 \ + Unit 1,000 bootstrap1 +$client transfer 0 from bootstrap1 to default_account -arg "\"$BOOTSTRAP4_IDENTITY\"" +assert_balance $BOOTSTRAP4_IDENTITY "4,000,100 ꜩ" +account=tz1SuakBpFdG9b4twyfrSMqZzruxhpMeSrE5 +$client transfer 0 from bootstrap1 to default_account -arg "\"$account\"" +assert_balance $account "100 ꜩ" + +# Test SELF +init_with_transfer $contract_dir/self.tz $key1 \ + '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' 1,000 bootstrap1 +$client transfer 0 from bootstrap1 to self +assert_storage_contains self "\"$(get_contract_addr self)\"" + + +assert_fails $client typecheck data '{ Elt 0 1 ; Elt 0 1 }' against type '(map nat nat)' +assert_fails $client typecheck data '{ Elt 0 1 ; Elt 10 1 ; Elt 5 1 }' against type '(map nat nat)' +assert_fails $client typecheck data '{ "A" ; "C" ; "B" }' against type '(set string)' +assert_fails $client typecheck data '{ "A" ; "B" ; "B" }' against type '(set string)' + +hash_result=`$client hash data '(Pair "22220.00" (Pair "2017-12-13T04:49:00Z" 034))' \ + of type '(pair tez (pair timestamp int))'` + +assert_output $contract_dir/hash_consistency_checker.tz Unit \ + '(Pair "22220.00" (Pair "2017-12-13T04:49:00Z" 034))' "$hash_result" + +assert_output $contract_dir/hash_consistency_checker.tz Unit \ + '(Pair "22,220" (Pair "2017-12-13T04:49:00+00:00" 34))' "$hash_result" + +printf "\nEnd of test\n" + +show_logs="no" diff --git a/test/test_lib.inc.sh b/src/bin_client/test/test_lib.inc.sh similarity index 98% rename from test/test_lib.inc.sh rename to src/bin_client/test/test_lib.inc.sh index b1549dc54..05fd780be 100755 --- a/test/test_lib.inc.sh +++ b/src/bin_client/test/test_lib.inc.sh @@ -1,7 +1,6 @@ #! /usr/bin/env bash -test_lib_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && echo "$(pwd -P)")" -test_dir="$(dirname "$test_lib_dir")" +test_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && echo "$(pwd -P)")" src_dir="$(dirname "$test_dir")" cd "$test_dir" @@ -12,6 +11,8 @@ local_node="${2:-$test_dir/../_build/default/src/bin_node/main.exe}" tezos_init_sandboxed_client="${3:-$test_dir/../src/bin_client/tezos-init-sandboxed-client.sh}" local_client="${4:-$test_dir/../_build/default/src/bin_client/main.exe}" +contract_dir="contracts" + source $tezos_sandboxed_node source $tezos_init_sandboxed_client diff --git a/test/test_multinode.sh b/src/bin_client/test/test_multinode.sh similarity index 100% rename from test/test_multinode.sh rename to src/bin_client/test/test_multinode.sh diff --git a/test/test_utils.sh b/src/bin_client/test/test_utils.sh similarity index 100% rename from test/test_utils.sh rename to src/bin_client/test/test_utils.sh diff --git a/src/bin_client/tezos-client.opam b/src/bin_client/tezos-client.opam index 6bdc013b9..071642c1c 100644 --- a/src/bin_client/tezos-client.opam +++ b/src/bin_client/tezos-client.opam @@ -13,6 +13,7 @@ depends: [ "tezos-client-base" "tezos-client-genesis" "tezos-client-alpha" + "tezos-node" { test } ] build: [ [ "jbuilder" "build" "-p" name "-j" jobs ] diff --git a/src/lib_protocol_compiler/jbuild_protocol_template b/src/lib_protocol_compiler/jbuild_protocol_template index c287a4ae9..bc7d87cd8 100644 --- a/src/lib_protocol_compiler/jbuild_protocol_template +++ b/src/lib_protocol_compiler/jbuild_protocol_template @@ -49,8 +49,6 @@ let sources = loop acc in loop [] -module M = Unix - let () = Format.kasprintf Jbuild_plugin.V1.send {| (jbuild_version 1) diff --git a/src/proto_alpha/lib_client/test/jbuild b/src/proto_alpha/lib_client/test/jbuild index 161508393..ea2c5d4f0 100644 --- a/src/proto_alpha/lib_client/test/jbuild +++ b/src/proto_alpha/lib_client/test/jbuild @@ -11,7 +11,6 @@ tezos-client-base tezos-client-genesis tezos-client-alpha - tezos-shell tezos-test-helpers)) (flags (:standard -w -9-32 -safe-string -open Tezos_base__TzPervasives diff --git a/test/LOG.1 b/test/LOG.1 deleted file mode 100644 index a111e45b2..000000000 --- a/test/LOG.1 +++ /dev/null @@ -1,56 +0,0 @@ -Generating a new identity... (level: 0.00) |.....| -Stored the new identity (idtQz1SPen7S6kf6ycS3twScNWzmo4) into '/tmp/tezos-node.H8iQAOvn/identity.json'. -Jan 31 17:05:09 - node.main: Starting the Tezos node... -Jan 31 17:05:09 - node.main: Peer's global id: idtQz1SPen7S6kf6ycS3twScNWzmo4 -Jan 31 17:05:09 - node.worker: bootstraping network... -Jan 31 17:05:09 - node.validator: activate network NetXj4yEEKnjaK8 -Jan 31 17:05:09 - p2p.maintenance: Too few connections (0) -Jan 31 17:05:09 - node.main: Starting the RPC server listening on port 18731. -Jan 31 17:05:09 - node.main: The Tezos node is now running! -Jan 31 17:05:10 - validator.block: [] Block BMNffiC51dD5ywYcv9urMBGXTCQtfDDbUrbLyJzexD37m72v4Ts succesfully validated -Jan 31 17:05:10 - validator.block: Pushed: 2018-01-31T16:05:10Z, Treated: 2018-01-31T16:05:10Z, Completed: 2018-01-31T16:05:10Z -Jan 31 17:05:10 - prevalidator: [NetXj4yEEKnjaK8] switching to new head BMNffiC51dD5ywYcv9urMBGXTCQtfDDbUrbLyJzexD37m72v4Ts -Jan 31 17:05:10 - prevalidator: Pushed: 2018-01-31T16:05:10Z, Treated: 2018-01-31T16:05:10Z, Completed: 2018-01-31T16:05:10Z -Jan 31 17:05:10 - net_validator: [NetXj4yEEKnjaK8] Update current head to BMNffiC51dD5ywYcv9urMBGXTCQtfDDbUrbLyJzexD37m72v4Ts (fitness 00::0000000000000001), same branch -Jan 31 17:05:10 - net_validator: Pushed: 2018-01-31T16:05:10Z, Treated: 2018-01-31T16:05:10Z, Completed: 2018-01-31T16:05:10Z -Jan 31 17:05:13 - validator.block: [] Block BMQUPiYAEYQ9ciE7cEs3nX5jquMGTrE2jTTPtqbo3YZVB5DPygr succesfully validated -Jan 31 17:05:13 - validator.block: Pushed: 2018-01-31T16:05:13Z, Treated: 2018-01-31T16:05:13Z, Completed: 2018-01-31T16:05:13Z -Jan 31 17:05:13 - prevalidator: [NetXj4yEEKnjaK8] switching to new head BMQUPiYAEYQ9ciE7cEs3nX5jquMGTrE2jTTPtqbo3YZVB5DPygr -Jan 31 17:05:13 - prevalidator: Pushed: 2018-01-31T16:05:13Z, Treated: 2018-01-31T16:05:13Z, Completed: 2018-01-31T16:05:13Z -Jan 31 17:05:13 - net_validator: [NetXj4yEEKnjaK8] Update current head to BMQUPiYAEYQ9ciE7cEs3nX5jquMGTrE2jTTPtqbo3YZVB5DPygr (fitness 00::0000000000000002), same branch -Jan 31 17:05:13 - net_validator: Pushed: 2018-01-31T16:05:13Z, Treated: 2018-01-31T16:05:13Z, Completed: 2018-01-31T16:05:13Z -Jan 31 17:05:13 - prevalidator: [NetXj4yEEKnjaK8] injecting operation ooaNUJkDP9jLAPwoWnTATHH4pcCeH1Tv45bT8sJAKCzeh8bm8wE -Jan 31 17:05:13 - prevalidator: Pushed: 2018-01-31T16:05:13Z, Treated: 2018-01-31T16:05:13Z, Completed: 2018-01-31T16:05:13Z -Jan 31 17:05:13 - prevalidator: [NetXj4yEEKnjaK8] injecting operation onzZfuRw5wMwYME9ZjuTrfumDiay7uym2vUR9nctz6of3kVVhU9 -Jan 31 17:05:13 - prevalidator: Pushed: 2018-01-31T16:05:13Z, Treated: 2018-01-31T16:05:13Z, Completed: 2018-01-31T16:05:13Z -Jan 31 17:05:13 - prevalidator: [NetXj4yEEKnjaK8] injecting operation onmCT6EwLBt2s5DbCty56jkHeU6Sgf5KeSJxtRUNJk1ZHw5nuPa -Jan 31 17:05:13 - prevalidator: Pushed: 2018-01-31T16:05:13Z, Treated: 2018-01-31T16:05:13Z, Completed: 2018-01-31T16:05:13Z -Jan 31 17:05:14 - p2p.maintenance: Too few connections (0) -Jan 31 17:05:14 - validator.block: [] Block BMS7x6FxryR7UvzAp8iUYwbd94Eu3B8hWNRNfwtv3jPD3D6Zq1o succesfully validated -Jan 31 17:05:14 - validator.block: Pushed: 2018-01-31T16:05:14Z, Treated: 2018-01-31T16:05:14Z, Completed: 2018-01-31T16:05:14Z -Jan 31 17:05:14 - prevalidator: [NetXj4yEEKnjaK8] switching to new head BMS7x6FxryR7UvzAp8iUYwbd94Eu3B8hWNRNfwtv3jPD3D6Zq1o -Jan 31 17:05:14 - prevalidator: Pushed: 2018-01-31T16:05:14Z, Treated: 2018-01-31T16:05:14Z, Completed: 2018-01-31T16:05:14Z -Jan 31 17:05:14 - net_validator: [NetXj4yEEKnjaK8] Update current head to BMS7x6FxryR7UvzAp8iUYwbd94Eu3B8hWNRNfwtv3jPD3D6Zq1o (fitness 00::0000000000000003), same branch -Jan 31 17:05:14 - net_validator: Pushed: 2018-01-31T16:05:14Z, Treated: 2018-01-31T16:05:14Z, Completed: 2018-01-31T16:05:14Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation opa2yA6dgUqfM7FpqmdSVyDTG5nS8KWH2Q9yEeGY1kvfxjg8qeQ -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation ootmLu2syJ5HgP38j96nREAD7138uZ1wBpnD9oPPbeRLdx9ALf7 -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation oopVFXbYMRH2fG2CLwQTYFUbTYCQTcoGTevkeFAUJFcpbmCkWcX -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation opG7QbUQfdnMecC47ZZVrRZao8qFh2cs469zgpowLCUgeScWRNG -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation ooGr1XcFmxvPmt2y1DNsMgERdUABzZVyqZtz6DjNf9vBRzYsF2e -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation oo5y1mfyPBNx5ypFYvgmV6RZXBektmWhnAeLaqaEHExRxCZG9d1 -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation onmMVBau5ZpMMPX6EwiPzqPyfUy5RoyMQ4T5k4kFr5uRewqtPkV -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation ootJHUSYZi13APP8c6ty1kkVEGqotNULMV26hchXfuT1gFoZTLN -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - prevalidator: [NetXj4yEEKnjaK8] injecting operation op7SjzpmnvApUBSoPjQnAgXVueFPBNAPjz4ouCEmHJnGEBq5DZx -Jan 31 17:05:15 - prevalidator: Pushed: 2018-01-31T16:05:15Z, Treated: 2018-01-31T16:05:15Z, Completed: 2018-01-31T16:05:15Z -Jan 31 17:05:15 - node.main: Received the TERM signal, triggering shutdown. -Jan 31 17:05:15 - node.main: Shutting down the Tezos node... -Jan 31 17:05:15 - node.main: Shutting down the RPC server... -Jan 31 17:05:15 - node.main: BYE (-11) diff --git a/test/test_contracts.sh b/test/test_contracts.sh deleted file mode 100755 index 5cae653ac..000000000 --- a/test/test_contracts.sh +++ /dev/null @@ -1,427 +0,0 @@ -#!/bin/bash - -set -e -set -o pipefail - -test_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)")" -source $test_dir/test_lib.inc.sh "$@" - -start_node 1 -activate_alpha - -sleep 2 -$client bake for bootstrap5 -max-priority 512 - -key1=foo -key2=bar - -$client gen keys $key1 -$client gen keys $key2 - -CONTRACT_PATH=contracts - -printf "\n\n" - -# Assert all contracts typecheck -if [ ! $NO_TYPECHECK ] ; then - for contract in `ls $CONTRACT_PATH/*.tz`; do - printf "[Typechecking %s]\n" "$contract"; - ${client} typecheck program "$contract"; - done - printf "All contracts are well typed\n\n" -fi - -# FORMAT: assert_output contract_file storage input expected_result - -assert_output $CONTRACT_PATH/ret_int.tz Unit Unit 300 - -# Identity on strings -assert_output $CONTRACT_PATH/str_id.tz Unit '"Hello"' '"Hello"' -assert_output $CONTRACT_PATH/str_id.tz Unit '"abcd"' '"abcd"' - -# Identity on pairs -assert_output $CONTRACT_PATH/pair_id.tz Unit '(Pair True False)' '(Pair True False)' -assert_output $CONTRACT_PATH/pair_id.tz Unit '(Pair False True)' '(Pair False True)' -assert_output $CONTRACT_PATH/pair_id.tz Unit '(Pair True True)' '(Pair True True)' -assert_output $CONTRACT_PATH/pair_id.tz Unit '(Pair False False)' '(Pair False False)' - -# Logical not -assert_output $CONTRACT_PATH/not.tz Unit True False -assert_output $CONTRACT_PATH/not.tz Unit False True - -# Logical and -assert_output $CONTRACT_PATH/and.tz Unit "(Pair False False)" False -assert_output $CONTRACT_PATH/and.tz Unit "(Pair False True)" False -assert_output $CONTRACT_PATH/and.tz Unit "(Pair True False)" False -assert_output $CONTRACT_PATH/and.tz Unit "(Pair True True)" True - -# Logical or -assert_output $CONTRACT_PATH/or.tz Unit "(Pair False False)" False -assert_output $CONTRACT_PATH/or.tz Unit "(Pair False True)" True -assert_output $CONTRACT_PATH/or.tz Unit "(Pair True False)" True -assert_output $CONTRACT_PATH/or.tz Unit "(Pair True True)" True - -# XOR -assert_output $CONTRACT_PATH/xor.tz Unit "(Pair False False)" False -assert_output $CONTRACT_PATH/xor.tz Unit "(Pair False True)" True -assert_output $CONTRACT_PATH/xor.tz Unit "(Pair True False)" True -assert_output $CONTRACT_PATH/xor.tz Unit "(Pair True True)" False - - -# Build list -assert_output $CONTRACT_PATH/build_list.tz Unit 0 "{ 0 }" -assert_output $CONTRACT_PATH/build_list.tz Unit 3 "{ 0 ; 1 ; 2 ; 3 }" -assert_output $CONTRACT_PATH/build_list.tz Unit 10 \ - "{ 0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10 }" - -# Concatenate all strings of a list into one string -assert_output $CONTRACT_PATH/concat_list.tz Unit '{ "a" ; "b" ; "c" }' '"abc"' -assert_output $CONTRACT_PATH/concat_list.tz Unit '{}' '""' -assert_output $CONTRACT_PATH/concat_list.tz \ - Unit '{ "Hello" ; " " ; "World" ; "!" }' '"Hello World!"' - -# Find maximum int in list -- returns None if not found -assert_output $CONTRACT_PATH/max_in_list.tz Unit '{}' 'None' -assert_output $CONTRACT_PATH/max_in_list.tz Unit '{ 1 }' '(Some 1)' -assert_output $CONTRACT_PATH/max_in_list.tz Unit '{ -1 }' '(Some -1)' -assert_output $CONTRACT_PATH/max_in_list.tz Unit \ - '{ 10 ; -1 ; -20 ; 100 ; 0 }' '(Some 100)' -assert_output $CONTRACT_PATH/max_in_list.tz Unit \ - '{ 10 ; -1 ; -20 ; 100 ; 0 }' '(Some 100)' -assert_output $CONTRACT_PATH/max_in_list.tz Unit \ - '{ -10 ; -1 ; -20 ; -100 }' '(Some -1)' - -# Identity on lists -assert_output $CONTRACT_PATH/list_id.tz Unit '{ "1" ; "2" ; "3" }' '{ "1" ; "2" ; "3" }' -assert_output $CONTRACT_PATH/list_id.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/list_id.tz Unit '{ "a" ; "b" ; "c" }' '{ "a" ; "b" ; "c" }' - -assert_output $CONTRACT_PATH/list_id_map.tz Unit '{ "1" ; "2" ; "3" }' '{ "1" ; "2" ; "3" }' -assert_output $CONTRACT_PATH/list_id_map.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/list_id_map.tz Unit '{ "a" ; "b" ; "c" }' '{ "a" ; "b" ; "c" }' - - -# Identity on maps -assert_output $CONTRACT_PATH/map_id.tz Unit '{ Elt 0 1 }' '{ Elt 0 1 }' -assert_output $CONTRACT_PATH/map_id.tz Unit '{ Elt 0 0 }' '{ Elt 0 0 }' -assert_output $CONTRACT_PATH/map_id.tz Unit '{ Elt 0 0 ; Elt 3 4 }' '{ Elt 0 0 ; Elt 3 4 }' - -# Map block on lists -assert_output $CONTRACT_PATH/list_map_block.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/list_map_block.tz Unit '{ 1 ; 1 ; 1 ; 1 }' '{ 1 ; 2 ; 3 ; 4 }' -assert_output $CONTRACT_PATH/list_map_block.tz Unit '{ 1 ; 2 ; 3 ; 0 }' '{ 1 ; 3 ; 5 ; 3 }' - -# List iter -assert_output $CONTRACT_PATH/list_iter.tz Unit '{ 10 ; 2 ; 1 }' 20 -assert_output $CONTRACT_PATH/list_iter.tz Unit '{ 3 ; 6 ; 9 }' 162 - -assert_output $CONTRACT_PATH/list_iter2.tz Unit '{ "a" ; "b" ; "c" }' '"cba"' -assert_output $CONTRACT_PATH/list_iter2.tz Unit '{}' '""' - - -# Identity on sets -assert_output $CONTRACT_PATH/set_id.tz Unit '{ "a" ; "b" ; "c" }' '{ "a" ; "b" ; "c" }' -assert_output $CONTRACT_PATH/set_id.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/set_id.tz Unit '{ "asdf" ; "bcde" }' '{ "asdf" ; "bcde" }' - -# Set member -- set is in storage -assert_output $CONTRACT_PATH/set_member.tz '{}' '"Hi"' 'False' -assert_output $CONTRACT_PATH/set_member.tz '{ "Hi" }' '"Hi"' 'True' -assert_output $CONTRACT_PATH/set_member.tz '{ "Hello" ; "World" }' '""' 'False' - -# Set size -assert_output $CONTRACT_PATH/set_size.tz Unit '{}' 0 -assert_output $CONTRACT_PATH/set_size.tz Unit '{ 1 }' 1 -assert_output $CONTRACT_PATH/set_size.tz Unit '{ 1 ; 2 ; 3 }' 3 -assert_output $CONTRACT_PATH/set_size.tz Unit '{ 1 ; 2 ; 3 ; 4 ; 5 ; 6 }' 6 - -# Set iter -assert_output $CONTRACT_PATH/set_iter.tz Unit '{}' 0 -assert_output $CONTRACT_PATH/set_iter.tz Unit '{ 1 }' 1 -assert_output $CONTRACT_PATH/set_iter.tz Unit '{ -100 ; 1 ; 2 ; 3 }' '-94' - -# Map size -assert_output $CONTRACT_PATH/map_size.tz Unit '{}' 0 -assert_output $CONTRACT_PATH/map_size.tz Unit '{ Elt "a" 1 }' 1 -assert_output $CONTRACT_PATH/map_size.tz Unit \ - '{ Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 }' 3 -assert_output $CONTRACT_PATH/map_size.tz Unit \ - '{ Elt "a" 1 ; Elt "b" 2 ; Elt "c" 3 ; Elt "d" 4 ; Elt "e" 5 ; Elt "f" 6 }' 6 - -# Contains all elements -- does the second list contain all of the same elements -# as the first one? I'm ignoring element multiplicity -assert_output $CONTRACT_PATH/contains_all.tz \ - Unit '(Pair {} {})' 'True' -assert_output $CONTRACT_PATH/contains_all.tz \ - Unit '(Pair { "a" } { "B" })' 'False' -assert_output $CONTRACT_PATH/contains_all.tz \ - Unit '(Pair { "A" } { "B" })' 'False' -assert_output $CONTRACT_PATH/contains_all.tz \ - Unit '(Pair { "B" } { "B" })' 'True' -assert_output $CONTRACT_PATH/contains_all.tz Unit \ - '(Pair { "B" ; "C" ; "asdf" } { "B" ; "B" ; "asdf" ; "C" })' 'True' -assert_output $CONTRACT_PATH/contains_all.tz Unit \ - '(Pair { "B" ; "B" ; "asdf" ; "C" } { "B" ; "C" ; "asdf" })' 'True' - -# Concatenate the string in storage with all strings in the given list -assert_output $CONTRACT_PATH/concat_hello.tz Unit \ - '{ "World!" }' '{ "Hello World!" }' -assert_output $CONTRACT_PATH/concat_hello.tz Unit \ - '{}' '{}' -assert_output $CONTRACT_PATH/concat_hello.tz Unit \ - '{ "test1" ; "test2" }' '{ "Hello test1" ; "Hello test2" }' - -# Create an empty map and add a string to it -assert_output $CONTRACT_PATH/empty_map.tz Unit Unit \ - '{ Elt "hello" "world" }' - -# Get the value stored at the given key in the map -assert_output $CONTRACT_PATH/get_map_value.tz '{ Elt "hello" "hi" }' \ - '"hello"' '(Some "hi")' -assert_output $CONTRACT_PATH/get_map_value.tz '{ Elt "hello" "hi" }' \ - '""' 'None' -assert_output $CONTRACT_PATH/get_map_value.tz \ - '{ Elt "1" "one" ; Elt "2" "two" }' \ - '"1"' '(Some "one")' - -# Map iter -assert_output $CONTRACT_PATH/map_iter.tz Unit '{ Elt 0 100 ; Elt 2 100 }' '(Pair 2 200)' -assert_output $CONTRACT_PATH/map_iter.tz Unit '{ Elt 1 1 ; Elt 2 100 }' '(Pair 3 101)' - -# Return True if True branch of if was taken and False otherwise -assert_output $CONTRACT_PATH/if.tz Unit True True -assert_output $CONTRACT_PATH/if.tz Unit False False - -# Generate a pair of or types -assert_output $CONTRACT_PATH/swap_left_right.tz Unit '(Left True)' '(Right True)' -assert_output $CONTRACT_PATH/swap_left_right.tz Unit '(Right "a")' '(Left "a")' - -# Reverse a list -assert_output $CONTRACT_PATH/reverse.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/reverse.tz Unit '{ "c" ; "b" ; "a" }' '{ "a" ; "b" ; "c" }' -assert_output $CONTRACT_PATH/reverse_loop.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/reverse_loop.tz Unit '{ "c" ; "b" ; "a" }' '{ "a" ; "b" ; "c" }' - -# Reverse using LOOP_LEFT -assert_output $CONTRACT_PATH/loop_left.tz Unit '{}' '{}' -assert_output $CONTRACT_PATH/loop_left.tz Unit '{ "c" ; "b" ; "a" }' '{ "a" ; "b" ; "c" }' - -# Exec concat contract -assert_output $CONTRACT_PATH/exec_concat.tz Unit '""' '"_abc"' -assert_output $CONTRACT_PATH/exec_concat.tz Unit '"test"' '"test_abc"' - -# Get current steps to quota -assert_output $CONTRACT_PATH/steps_to_quota.tz Unit Unit 39991 - -# Get the current balance of the contract -assert_output $CONTRACT_PATH/balance.tz Unit Unit '"4,000,000"' - -# Test comparisons on tez { EQ ; GT ; LT ; GE ; LE } -assert_output $CONTRACT_PATH/compare.tz Unit '(Pair "1.00" "2.00")' '{ False ; False ; True ; False ; True }' -assert_output $CONTRACT_PATH/compare.tz Unit '(Pair "2.00" "1.00")' '{ False ; True ; False ; True ; False }' -assert_output $CONTRACT_PATH/compare.tz Unit '(Pair "2.37" "2.37")' '{ True ; False ; False ; True ; True }' - -# Test addition and subtraction on tez -assert_output $CONTRACT_PATH/tez_add_sub.tz Unit '(Pair "2" "1")' '(Pair "3" "1")' -assert_output $CONTRACT_PATH/tez_add_sub.tz Unit '(Pair "2.31" "1.01")' '(Pair "3.32" "1.3")' - -# Test get first element of list -assert_output $CONTRACT_PATH/first.tz Unit '{ 1 ; 2 ; 3 ; 4 }' '1' -assert_output $CONTRACT_PATH/first.tz Unit '{ 4 }' '4' - -# Hash input string -# Test assumed to be correct -- hash is based on encoding of AST -assert_output $CONTRACT_PATH/hash_string.tz Unit '"abcdefg"' '"exprv3MnhXvjthGzZ7jDtXRRFremZyey9rsGtL7JRkeaQX1fThN7WF"' -assert_output $CONTRACT_PATH/hash_string.tz Unit '"12345"' '"expru81QVHsW2qaWLNHnMHSxDNhqtat17ajadri6mKUvXyc2EWHZC3"' - -# Test ASSERT -assert_output $CONTRACT_PATH/assert.tz Unit True Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert.tz on storage Unit and input False - -# COMPARE; ASSERT_ -assert_output $CONTRACT_PATH/assert_eq.tz Unit '(Pair -1 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_eq.tz on storage Unit and input '(Pair 0 -1)' - -assert_output $CONTRACT_PATH/assert_eq.tz Unit '(Pair -1 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_eq.tz on storage Unit and input '(Pair 0 -1)' - -assert_output $CONTRACT_PATH/assert_neq.tz Unit '(Pair 0 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_neq.tz on storage Unit and input '(Pair -1 -1)' - -assert_output $CONTRACT_PATH/assert_lt.tz Unit '(Pair -1 0)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_lt.tz on storage Unit and input '(Pair 0 -1)' -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_lt.tz on storage Unit and input '(Pair 0 0)' - -assert_output $CONTRACT_PATH/assert_le.tz Unit '(Pair 0 0)' Unit -assert_output $CONTRACT_PATH/assert_le.tz Unit '(Pair -1 0)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_le.tz on storage Unit and input '(Pair 0 -1)' - -assert_output $CONTRACT_PATH/assert_gt.tz Unit '(Pair 0 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_gt.tz on storage Unit and input '(Pair -1 0)' -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_gt.tz on storage Unit and input '(Pair 0 0)' - -assert_output $CONTRACT_PATH/assert_ge.tz Unit '(Pair 0 0)' Unit -assert_output $CONTRACT_PATH/assert_ge.tz Unit '(Pair 0 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_ge.tz on storage Unit and input '(Pair -1 0)' - -# ASSERT_CMP -assert_output $CONTRACT_PATH/assert_cmpeq.tz Unit '(Pair -1 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmpeq.tz on storage Unit and input '(Pair 0 -1)' - -assert_output $CONTRACT_PATH/assert_cmpeq.tz Unit '(Pair -1 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmpeq.tz on storage Unit and input '(Pair 0 -1)' - -assert_output $CONTRACT_PATH/assert_cmpneq.tz Unit '(Pair 0 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmpneq.tz on storage Unit and input '(Pair -1 -1)' - -assert_output $CONTRACT_PATH/assert_cmplt.tz Unit '(Pair -1 0)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmplt.tz on storage Unit and input '(Pair 0 -1)' -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmplt.tz on storage Unit and input '(Pair 0 0)' - -assert_output $CONTRACT_PATH/assert_cmple.tz Unit '(Pair 0 0)' Unit -assert_output $CONTRACT_PATH/assert_cmple.tz Unit '(Pair -1 0)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmple.tz on storage Unit and input '(Pair 0 -1)' - -assert_output $CONTRACT_PATH/assert_cmpgt.tz Unit '(Pair 0 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmpgt.tz on storage Unit and input '(Pair -1 0)' -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmpgt.tz on storage Unit and input '(Pair 0 0)' - -assert_output $CONTRACT_PATH/assert_cmpge.tz Unit '(Pair 0 0)' Unit -assert_output $CONTRACT_PATH/assert_cmpge.tz Unit '(Pair 0 -1)' Unit -assert_fails ${TZCLIENT} run program $CONTRACT_PATH/assert_cmpge.tz on storage Unit and input '(Pair -1 0)' - -# IF_SOME -assert_output $CONTRACT_PATH/if_some.tz Unit '(Some "hello")' '"hello"' -assert_output $CONTRACT_PATH/if_some.tz Unit 'None' '""' - -# Tests the SET_CAR and SET_CDR instructions -assert_output $CONTRACT_PATH/set_car.tz '(Pair "hello" 0)' '"world"' '(Pair "world" 0)' -assert_output $CONTRACT_PATH/set_car.tz '(Pair "hello" 0)' '"abc"' '(Pair "abc" 0)' -assert_output $CONTRACT_PATH/set_car.tz '(Pair "hello" 0)' '""' '(Pair "" 0)' - -assert_output $CONTRACT_PATH/set_cdr.tz '(Pair "hello" 0)' '1' '(Pair "hello" 1)' -assert_output $CONTRACT_PATH/set_cdr.tz '(Pair "hello" 500)' '3' '(Pair "hello" 3)' -assert_output $CONTRACT_PATH/set_cdr.tz '(Pair "hello" 7)' '100' '(Pair "hello" 100)' - -assert_storage $CONTRACT_PATH/set_caddaadr.tz \ -'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "0") 4) 5))) 6)' \ -'"3"' \ -'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "3") 4) 5))) 6)' - -assert_storage $CONTRACT_PATH/map_caddaadr.tz \ -'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "0") 4) 5))) 6)' \ -'Unit' \ -'(Pair (Pair 1 (Pair 2 (Pair (Pair (Pair 3 "1") 4) 5))) 6)' - -# Did the given key sign the string? (key is bootstrap1) -assert_output $CONTRACT_PATH/check_signature.tz \ -'(Pair "26981d372a7b3866621bf79713d249197fe6d518ef702fa65738e1715bde9da54df04fefbcc84287ecaa9f74ad9296462731aa24bbcece63c6bf73a8f5752309" "hello")' \ -'"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' True - -assert_output $CONTRACT_PATH/check_signature.tz \ -'(Pair "26981d372a7b3866621bf79713d249197fe6d518ef702fa65738e1715bde9da54df04fefbcc84287ecaa9f74ad9296462731aa24bbcece63c6bf73a8f5752309" "abcd")' \ -'"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' False - -# Convert a public key to a public key hash -assert_output $CONTRACT_PATH/hash_key.tz Unit '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' -assert_output $CONTRACT_PATH/hash_key.tz Unit '"edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES"' '"tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k"' - -$client transfer 1,000 from bootstrap1 to $key1 -$client transfer 2,000 from bootstrap1 to $key2 - -assert_balance $key1 "1,000 ꜩ" -assert_balance $key2 "2,000 ꜩ" - -# Create a contract and transfer 100 ꜩ to it -init_with_transfer $CONTRACT_PATH/store_input.tz $key1 '""' 100 bootstrap1 -$client transfer 100 from bootstrap1 to store_input -arg '"abcdefg"' -assert_balance store_input "200 ꜩ" -assert_storage_contains store_input '"abcdefg"' -$client transfer 100 from bootstrap1 to store_input -arg '"xyz"' -assert_storage_contains store_input '"xyz"' - -init_with_transfer $CONTRACT_PATH/transfer_amount.tz $key1 '"0"' "100" bootstrap1 -$client transfer 500 from bootstrap1 to transfer_amount -arg Unit -assert_storage_contains transfer_amount 500 - -# This tests the `NOW` instruction. -# This test may fail if timings are marginal, though I have not yet seen this happen -init_with_transfer $CONTRACT_PATH/store_now.tz $key1 '"2017-07-13T09:19:01Z"' "100" bootstrap1 -$client transfer 500 from bootstrap1 to store_now -arg Unit -assert_storage_contains store_now "$($client get timestamp)" - -# Test timestamp operations -assert_output $CONTRACT_PATH/add_timestamp_delta.tz Unit '(Pair 100 100)' '"1970-01-01T00:03:20Z"' -assert_output $CONTRACT_PATH/add_timestamp_delta.tz Unit '(Pair 100 -100)' '"1970-01-01T00:00:00Z"' -assert_output $CONTRACT_PATH/add_timestamp_delta.tz Unit '(Pair "1970-01-01T00:00:00Z" 0)' '"1970-01-01T00:00:00Z"' - -assert_output $CONTRACT_PATH/add_delta_timestamp.tz Unit '(Pair 100 100)' '"1970-01-01T00:03:20Z"' -assert_output $CONTRACT_PATH/add_delta_timestamp.tz Unit '(Pair -100 100)' '"1970-01-01T00:00:00Z"' -assert_output $CONTRACT_PATH/add_delta_timestamp.tz Unit '(Pair 0 "1970-01-01T00:00:00Z")' '"1970-01-01T00:00:00Z"' - -assert_output $CONTRACT_PATH/sub_timestamp_delta.tz Unit '(Pair 100 100)' '"1970-01-01T00:00:00Z"' -assert_output $CONTRACT_PATH/sub_timestamp_delta.tz Unit '(Pair 100 -100)' '"1970-01-01T00:03:20Z"' -assert_output $CONTRACT_PATH/sub_timestamp_delta.tz Unit '(Pair 100 2000000000000000000)' -1999999999999999900 - -assert_output $CONTRACT_PATH/diff_timestamps.tz Unit '(Pair 0 0)' 0 -assert_output $CONTRACT_PATH/diff_timestamps.tz Unit '(Pair 0 1)' -1 -assert_output $CONTRACT_PATH/diff_timestamps.tz Unit '(Pair 1 0)' 1 -assert_output $CONTRACT_PATH/diff_timestamps.tz Unit '(Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z")' 200 - -# Tests TRANSFER_TO -$client originate account "test_transfer_account1" for $key1 transferring 100 from bootstrap1 -$client originate account "test_transfer_account2" for $key1 transferring 20 from bootstrap1 -init_with_transfer $CONTRACT_PATH/transfer_to.tz $key2 Unit 1,000 bootstrap1 -assert_balance test_transfer_account1 "100 ꜩ" -$client transfer 100 from bootstrap1 to transfer_to \ - -arg "\"$(get_contract_addr test_transfer_account1)\"" -assert_balance test_transfer_account1 "200 ꜩ" # Why isn't this 200 ꜩ? Baking fee? -$client transfer 100 from bootstrap1 to transfer_to \ - -arg "\"$(get_contract_addr test_transfer_account2)\"" -assert_balance test_transfer_account2 "120 ꜩ" # Why isn't this 120 ꜩ? Baking fee? - -# Tests create_account -init_with_transfer $CONTRACT_PATH/create_account.tz $key2 \ - "\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1 -$client transfer 100 from bootstrap1 to create_account \ - -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' | assert_in_output "New contract" - -# Creates a contract, transfers data to it and stores the data -init_with_transfer $CONTRACT_PATH/create_contract.tz $key2 \ - "\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1 -$client transfer 0 from bootstrap1 to create_contract -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' -assert_storage_contains create_contract '"abcdefg"' - -# Test DEFAULT_ACCOUNT -init_with_transfer $CONTRACT_PATH/default_account.tz $key1 \ - Unit 1,000 bootstrap1 -$client transfer 0 from bootstrap1 to default_account -arg "\"$BOOTSTRAP4_IDENTITY\"" -assert_balance $BOOTSTRAP4_IDENTITY "4,000,100 ꜩ" -account=tz1SuakBpFdG9b4twyfrSMqZzruxhpMeSrE5 -$client transfer 0 from bootstrap1 to default_account -arg "\"$account\"" -assert_balance $account "100 ꜩ" - -# Test SELF -init_with_transfer $CONTRACT_PATH/self.tz $key1 \ - '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' 1,000 bootstrap1 -$client transfer 0 from bootstrap1 to self -assert_storage_contains self "\"$(get_contract_addr self)\"" - - -assert_fails $client typecheck data '{ Elt 0 1 ; Elt 0 1 }' against type '(map nat nat)' -assert_fails $client typecheck data '{ Elt 0 1 ; Elt 10 1 ; Elt 5 1 }' against type '(map nat nat)' -assert_fails $client typecheck data '{ "A" ; "C" ; "B" }' against type '(set string)' -assert_fails $client typecheck data '{ "A" ; "B" ; "B" }' against type '(set string)' - -hash_result=`$client hash data '(Pair "22220.00" (Pair "2017-12-13T04:49:00Z" 034))' \ - of type '(pair tez (pair timestamp int))'` - -assert_output $CONTRACT_PATH/hash_consistency_checker.tz Unit \ - '(Pair "22220.00" (Pair "2017-12-13T04:49:00Z" 034))' "$hash_result" - -assert_output $CONTRACT_PATH/hash_consistency_checker.tz Unit \ - '(Pair "22,220" (Pair "2017-12-13T04:49:00+00:00" 34))' "$hash_result" - -printf "\nEnd of test\n" - -show_logs="no" diff --git a/test/tezos-test.opam b/test/tezos-test.opam deleted file mode 100644 index a4fb9684a..000000000 --- a/test/tezos-test.opam +++ /dev/null @@ -1,21 +0,0 @@ -opam-version: "1.2" -version: "dev" -maintainer: "contact@tezos.com" -authors: [ "Tezos devteam" ] -homepage: "https://www.tezos.com/" -bug-reports: "https://gitlab.com/tezos/tezos/issues" -dev-repo: "https://gitlab.com/tezos/tezos.git" -license: "unreleased" -depends: [ - "ocamlfind" { build } - "jbuilder" { build & >= "1.0+beta15" } - "tezos-node" - "tezos-client" - "kaputt" -] -build: [ - [ "jbuilder" "build" "-p" name "-j" jobs "@buildtest" ] -] -build-test: [ - [ "jbuilder" "runtest" "-p" name "-j" jobs ] -]