@layerzerolabs/protocol-stellar-v2 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +727 -0
- package/.turbo/turbo-lint.log +158 -0
- package/.turbo/turbo-test.log +796 -0
- package/Cargo.lock +2237 -0
- package/Cargo.toml +63 -0
- package/clippy.toml +7 -0
- package/contracts/common-macros/Cargo.toml +20 -0
- package/contracts/common-macros/src/error.rs +53 -0
- package/contracts/common-macros/src/event.rs +16 -0
- package/contracts/common-macros/src/lib.rs +255 -0
- package/contracts/common-macros/src/ownable.rs +63 -0
- package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +310 -0
- package/contracts/common-macros/src/storage.rs +439 -0
- package/contracts/common-macros/src/tests.rs +287 -0
- package/contracts/common-macros/src/ttl_configurable.rs +60 -0
- package/contracts/endpoint-v2/ARCHITECTURE.md +233 -0
- package/contracts/endpoint-v2/Cargo.toml +30 -0
- package/contracts/endpoint-v2/src/constants.rs +52 -0
- package/contracts/endpoint-v2/src/endpoint_v2.rs +305 -0
- package/contracts/endpoint-v2/src/errors.rs +29 -0
- package/contracts/endpoint-v2/src/events.rs +207 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_composer.rs +26 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +170 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_receiver.rs +43 -0
- package/contracts/endpoint-v2/src/interfaces/message_lib.rs +62 -0
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +220 -0
- package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +121 -0
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +63 -0
- package/contracts/endpoint-v2/src/interfaces/mod.rs +17 -0
- package/contracts/endpoint-v2/src/interfaces/send_lib.rs +70 -0
- package/contracts/endpoint-v2/src/lib.rs +22 -0
- package/contracts/endpoint-v2/src/message_lib_manager.rs +315 -0
- package/contracts/endpoint-v2/src/messaging_channel.rs +218 -0
- package/contracts/endpoint-v2/src/messaging_composer.rs +76 -0
- package/contracts/endpoint-v2/src/storage.rs +78 -0
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +131 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +237 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +42 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +211 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +18 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +10 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +10 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +424 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +144 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +72 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +29 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +513 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +43 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +27 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +30 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +202 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +59 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +172 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +23 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +10 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +131 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +35 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +79 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +246 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +285 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +180 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +405 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +80 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +131 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +358 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +316 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +288 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +316 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +388 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +307 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +10 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +239 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +324 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +242 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +232 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +212 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +213 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +269 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +173 -0
- package/contracts/endpoint-v2/src/tests/mock.rs +132 -0
- package/contracts/endpoint-v2/src/tests/mod.rs +12 -0
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +126 -0
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +82 -0
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +115 -0
- package/contracts/endpoint-v2/src/tests/util/mod.rs +3 -0
- package/contracts/endpoint-v2/src/util.rs +52 -0
- package/contracts/message-libs/Cargo.toml +12 -0
- package/contracts/message-libs/block-message-lib/Cargo.toml +19 -0
- package/contracts/message-libs/block-message-lib/src/lib.rs +70 -0
- package/contracts/message-libs/lib.rs +2 -0
- package/contracts/message-libs/message-lib-common/Cargo.toml +24 -0
- package/contracts/message-libs/message-lib-common/src/errors.rs +20 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +55 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/executor.rs +46 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/treasury.rs +17 -0
- package/contracts/message-libs/message-lib-common/src/lib.rs +14 -0
- package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +99 -0
- package/contracts/message-libs/message-lib-common/src/testing_utils.rs +27 -0
- package/contracts/message-libs/message-lib-common/src/tests/mod.rs +2 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +162 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +319 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +190 -0
- package/contracts/message-libs/simple-message-lib/Cargo.toml +26 -0
- package/contracts/message-libs/simple-message-lib/src/errors.rs +11 -0
- package/contracts/message-libs/simple-message-lib/src/lib.rs +14 -0
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +136 -0
- package/contracts/message-libs/simple-message-lib/src/storage.rs +27 -0
- package/contracts/message-libs/simple-message-lib/src/test.rs +280 -0
- package/contracts/message-libs/treasury/Cargo.toml +27 -0
- package/contracts/message-libs/treasury/src/errors.rs +10 -0
- package/contracts/message-libs/treasury/src/events.rs +28 -0
- package/contracts/message-libs/treasury/src/interfaces/mod.rs +3 -0
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +20 -0
- package/contracts/message-libs/treasury/src/lib.rs +20 -0
- package/contracts/message-libs/treasury/src/storage.rs +18 -0
- package/contracts/message-libs/treasury/src/tests/mod.rs +2 -0
- package/contracts/message-libs/treasury/src/tests/setup.rs +112 -0
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +562 -0
- package/contracts/message-libs/treasury/src/treasury.rs +140 -0
- package/contracts/message-libs/uln-302/Cargo.toml +28 -0
- package/contracts/message-libs/uln-302/src/config_validation.rs +173 -0
- package/contracts/message-libs/uln-302/src/errors.rs +29 -0
- package/contracts/message-libs/uln-302/src/events.rs +72 -0
- package/contracts/message-libs/uln-302/src/interfaces/mod.rs +5 -0
- package/contracts/message-libs/uln-302/src/interfaces/receive.rs +82 -0
- package/contracts/message-libs/uln-302/src/interfaces/send.rs +159 -0
- package/contracts/message-libs/uln-302/src/lib.rs +20 -0
- package/contracts/message-libs/uln-302/src/receive.rs +199 -0
- package/contracts/message-libs/uln-302/src/send.rs +349 -0
- package/contracts/message-libs/uln-302/src/storage.rs +47 -0
- package/contracts/message-libs/uln-302/src/tests/config/mod.rs +2 -0
- package/contracts/message-libs/uln-302/src/tests/config/oapp_uln_config.rs +291 -0
- package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +163 -0
- package/contracts/message-libs/uln-302/src/tests/mod.rs +7 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/commit_verification.rs +183 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/confirmations.rs +128 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +104 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/mod.rs +66 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +79 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verifiable.rs +463 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verify.rs +173 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +132 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +117 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/mod.rs +6 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/quote.rs +586 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +834 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +95 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +80 -0
- package/contracts/message-libs/uln-302/src/tests/setup.rs +268 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +47 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +51 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +51 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_oapp_executor_config.rs +48 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +4 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +998 -0
- package/contracts/message-libs/uln-302/src/uln302.rs +117 -0
- package/contracts/oapp-macros/Cargo.toml +21 -0
- package/contracts/oapp-macros/src/lib.rs +408 -0
- package/contracts/oapp-macros/src/oapp_core.rs +49 -0
- package/contracts/oapp-macros/src/oapp_full.rs +15 -0
- package/contracts/oapp-macros/src/oapp_options_type3.rs +46 -0
- package/contracts/oapp-macros/src/oapp_receiver.rs +67 -0
- package/contracts/oapp-macros/src/oapp_sender.rs +23 -0
- package/contracts/oapp-macros/src/util.rs +103 -0
- package/contracts/oapp-macros/tests/test_macros.rs +522 -0
- package/contracts/oapps/Cargo.toml +12 -0
- package/contracts/oapps/counter/Cargo.toml +24 -0
- package/contracts/oapps/counter/integration_tests/mod.rs +3 -0
- package/contracts/oapps/counter/integration_tests/setup.rs +201 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +166 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +144 -0
- package/contracts/oapps/counter/src/codec.rs +63 -0
- package/contracts/oapps/counter/src/counter.rs +235 -0
- package/contracts/oapps/counter/src/errors.rs +9 -0
- package/contracts/oapps/counter/src/lib.rs +16 -0
- package/contracts/oapps/counter/src/options.rs +30 -0
- package/contracts/oapps/counter/src/storage.rs +33 -0
- package/contracts/oapps/counter/src/tests/mod.rs +37 -0
- package/contracts/oapps/counter/src/tests/test_codec.rs +64 -0
- package/contracts/oapps/counter/src/tests/test_counter.rs +390 -0
- package/contracts/oapps/counter/src/u256_ext.rs +21 -0
- package/contracts/oapps/lib.rs +2 -0
- package/contracts/oapps/oapp/Cargo.toml +21 -0
- package/contracts/oapps/oapp/src/errors.rs +9 -0
- package/contracts/oapps/oapp/src/lib.rs +10 -0
- package/contracts/oapps/oapp/src/oapp_core.rs +92 -0
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +89 -0
- package/contracts/oapps/oapp/src/oapp_receiver.rs +72 -0
- package/contracts/oapps/oapp/src/oapp_sender.rs +66 -0
- package/contracts/oapps/oapp/src/tests/mod.rs +4 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +162 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +180 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +157 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +283 -0
- package/contracts/utils/Cargo.toml +21 -0
- package/contracts/utils/src/buffer_reader.rs +143 -0
- package/contracts/utils/src/buffer_writer.rs +117 -0
- package/contracts/utils/src/bytes_ext.rs +19 -0
- package/contracts/utils/src/errors.rs +30 -0
- package/contracts/utils/src/lib.rs +15 -0
- package/contracts/utils/src/option_ext.rs +38 -0
- package/contracts/utils/src/ownable.rs +88 -0
- package/contracts/utils/src/testing_utils.rs +100 -0
- package/contracts/utils/src/tests/buffer_reader.rs +1006 -0
- package/contracts/utils/src/tests/buffer_writer.rs +330 -0
- package/contracts/utils/src/tests/bytes_ext.rs +77 -0
- package/contracts/utils/src/tests/mod.rs +4 -0
- package/contracts/utils/src/tests/ownable.rs +149 -0
- package/contracts/utils/src/ttl.rs +164 -0
- package/contracts/workers/Cargo.toml +13 -0
- package/contracts/workers/executor/Cargo.toml +26 -0
- package/contracts/workers/executor/src/events.rs +22 -0
- package/contracts/workers/executor/src/executor.rs +347 -0
- package/contracts/workers/executor/src/interfaces/executor.rs +40 -0
- package/contracts/workers/executor/src/interfaces/mod.rs +5 -0
- package/contracts/workers/executor/src/interfaces/types.rs +51 -0
- package/contracts/workers/executor/src/lib.rs +10 -0
- package/contracts/workers/executor/src/storage.rs +23 -0
- package/contracts/workers/lib.rs +2 -0
- package/contracts/workers/worker-common/Cargo.toml +18 -0
- package/contracts/workers/worker-common/src/constants.rs +17 -0
- package/contracts/workers/worker-common/src/errors.rs +6 -0
- package/contracts/workers/worker-common/src/events.rs +34 -0
- package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +35 -0
- package/contracts/workers/worker-common/src/interfaces/mod.rs +7 -0
- package/contracts/workers/worker-common/src/interfaces/price_feed.rs +40 -0
- package/contracts/workers/worker-common/src/interfaces/worker.rs +60 -0
- package/contracts/workers/worker-common/src/lib.rs +19 -0
- package/contracts/workers/worker-common/src/storage.rs +32 -0
- package/contracts/workers/worker-common/src/worker_common.rs +166 -0
- package/package.json +25 -0
- package/rust-toolchain.toml +4 -0
- package/rustfmt.toml +17 -0
- package/sdk/.turbo/turbo-build.log +4 -0
- package/sdk/dist/generated/bml.d.ts +452 -0
- package/sdk/dist/generated/bml.js +72 -0
- package/sdk/dist/generated/counter.d.ts +824 -0
- package/sdk/dist/generated/counter.js +125 -0
- package/sdk/dist/generated/endpoint.d.ts +1676 -0
- package/sdk/dist/generated/endpoint.js +216 -0
- package/sdk/dist/generated/sml.d.ts +810 -0
- package/sdk/dist/generated/sml.js +132 -0
- package/sdk/dist/generated/uln302.d.ts +1227 -0
- package/sdk/dist/generated/uln302.js +185 -0
- package/sdk/dist/index.d.ts +5 -0
- package/sdk/dist/index.js +5 -0
- package/sdk/node_modules/.bin/tsc +21 -0
- package/sdk/node_modules/.bin/tsserver +21 -0
- package/sdk/node_modules/.bin/vitest +21 -0
- package/sdk/node_modules/.bin/zx +21 -0
- package/sdk/package.json +40 -0
- package/sdk/src/index.ts +5 -0
- package/sdk/test/index.test.ts +271 -0
- package/sdk/test/suites/constants.ts +13 -0
- package/sdk/test/suites/deploy.ts +277 -0
- package/sdk/test/suites/localnet.ts +42 -0
- package/sdk/test/suites/scan.ts +189 -0
- package/sdk/tsconfig.json +106 -0
- package/tools/ts-bindings-gen/Cargo.toml +14 -0
- package/tools/ts-bindings-gen/src/main.rs +147 -0
- package/turbo.json +12 -0
|
@@ -0,0 +1,1006 @@
|
|
|
1
|
+
use soroban_sdk::{address_payload::AddressPayload, testutils::Address as _, Address, Bytes, BytesN, Env};
|
|
2
|
+
|
|
3
|
+
use crate::buffer_reader::BufferReader;
|
|
4
|
+
use crate::buffer_writer::BufferWriter;
|
|
5
|
+
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_new_buffer_reader() {
|
|
8
|
+
let env = Env::default();
|
|
9
|
+
let bytes = Bytes::from_array(&env, &[0u8, 1, 2, 3, 4, 5]);
|
|
10
|
+
let _reader = BufferReader::new(&bytes);
|
|
11
|
+
|
|
12
|
+
// Verify reader is created (we can't access pos directly but can verify by reading)
|
|
13
|
+
assert!(true); // Successfully created
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#[test]
|
|
17
|
+
fn test_read_u32() {
|
|
18
|
+
let env = Env::default();
|
|
19
|
+
// Create bytes representing u32 value 0x01020304 (16909060 in decimal)
|
|
20
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
21
|
+
let mut reader = BufferReader::new(&bytes);
|
|
22
|
+
|
|
23
|
+
let value = reader.read_u32();
|
|
24
|
+
assert_eq!(value, 0x01020304u32);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
#[test]
|
|
28
|
+
fn test_read_u32_zero() {
|
|
29
|
+
let env = Env::default();
|
|
30
|
+
let bytes = Bytes::from_array(&env, &[0x00, 0x00, 0x00, 0x00]);
|
|
31
|
+
let mut reader = BufferReader::new(&bytes);
|
|
32
|
+
|
|
33
|
+
let value = reader.read_u32();
|
|
34
|
+
assert_eq!(value, 0u32);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
#[test]
|
|
38
|
+
fn test_read_u32_max_value() {
|
|
39
|
+
let env = Env::default();
|
|
40
|
+
let bytes = Bytes::from_array(&env, &[0xFF, 0xFF, 0xFF, 0xFF]);
|
|
41
|
+
let mut reader = BufferReader::new(&bytes);
|
|
42
|
+
|
|
43
|
+
let value = reader.read_u32();
|
|
44
|
+
assert_eq!(value, u32::MAX);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#[test]
|
|
48
|
+
fn test_read_u64() {
|
|
49
|
+
let env = Env::default();
|
|
50
|
+
// Create bytes representing u64 value 0x0102030405060708
|
|
51
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]);
|
|
52
|
+
let mut reader = BufferReader::new(&bytes);
|
|
53
|
+
|
|
54
|
+
let value = reader.read_u64();
|
|
55
|
+
assert_eq!(value, 0x0102030405060708u64);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#[test]
|
|
59
|
+
fn test_read_u64_zero() {
|
|
60
|
+
let env = Env::default();
|
|
61
|
+
let bytes = Bytes::from_array(&env, &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
62
|
+
let mut reader = BufferReader::new(&bytes);
|
|
63
|
+
|
|
64
|
+
let value = reader.read_u64();
|
|
65
|
+
assert_eq!(value, 0u64);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#[test]
|
|
69
|
+
fn test_read_u64_max_value() {
|
|
70
|
+
let env = Env::default();
|
|
71
|
+
let bytes = Bytes::from_array(&env, &[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
|
|
72
|
+
let mut reader = BufferReader::new(&bytes);
|
|
73
|
+
|
|
74
|
+
let value = reader.read_u64();
|
|
75
|
+
assert_eq!(value, u64::MAX);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
#[test]
|
|
79
|
+
fn test_sequential_reads() {
|
|
80
|
+
let env = Env::default();
|
|
81
|
+
|
|
82
|
+
// Create a buffer with multiple values:
|
|
83
|
+
// - u32: 0x01020304
|
|
84
|
+
// - u64: 0x0102030405060708
|
|
85
|
+
// - another u32: 0xAABBCCDD
|
|
86
|
+
let buffer_array: [u8; 16] = [
|
|
87
|
+
0x01, 0x02, 0x03, 0x04, // u32
|
|
88
|
+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // u64
|
|
89
|
+
0xAA, 0xBB, 0xCC, 0xDD, // u32
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
let bytes = Bytes::from_array(&env, &buffer_array);
|
|
93
|
+
let mut reader = BufferReader::new(&bytes);
|
|
94
|
+
|
|
95
|
+
// Read in sequence and verify position is being tracked correctly
|
|
96
|
+
let val1 = reader.read_u32();
|
|
97
|
+
assert_eq!(val1, 0x01020304u32);
|
|
98
|
+
|
|
99
|
+
let val2 = reader.read_u64();
|
|
100
|
+
assert_eq!(val2, 0x0102030405060708u64);
|
|
101
|
+
|
|
102
|
+
let val3 = reader.read_u32();
|
|
103
|
+
assert_eq!(val3, 0xAABBCCDDu32);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#[test]
|
|
107
|
+
fn test_read_multiple_u32() {
|
|
108
|
+
let env = Env::default();
|
|
109
|
+
let bytes = Bytes::from_array(
|
|
110
|
+
&env,
|
|
111
|
+
&[
|
|
112
|
+
0x00, 0x00, 0x00, 0x01, // 1
|
|
113
|
+
0x00, 0x00, 0x00, 0x02, // 2
|
|
114
|
+
0x00, 0x00, 0x00, 0x03, // 3
|
|
115
|
+
],
|
|
116
|
+
);
|
|
117
|
+
let mut reader = BufferReader::new(&bytes);
|
|
118
|
+
|
|
119
|
+
assert_eq!(reader.read_u32(), 1u32);
|
|
120
|
+
assert_eq!(reader.read_u32(), 2u32);
|
|
121
|
+
assert_eq!(reader.read_u32(), 3u32);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
#[test]
|
|
125
|
+
fn test_read_multiple_u64() {
|
|
126
|
+
let env = Env::default();
|
|
127
|
+
let bytes = Bytes::from_array(
|
|
128
|
+
&env,
|
|
129
|
+
&[
|
|
130
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // 1
|
|
131
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // 2
|
|
132
|
+
],
|
|
133
|
+
);
|
|
134
|
+
let mut reader = BufferReader::new(&bytes);
|
|
135
|
+
|
|
136
|
+
assert_eq!(reader.read_u64(), 1u64);
|
|
137
|
+
assert_eq!(reader.read_u64(), 2u64);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
#[test]
|
|
141
|
+
#[should_panic]
|
|
142
|
+
fn test_read_u32_insufficient_bytes_empty() {
|
|
143
|
+
let env = Env::default();
|
|
144
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
145
|
+
let mut reader = BufferReader::new(&bytes);
|
|
146
|
+
|
|
147
|
+
// Should panic - no bytes available
|
|
148
|
+
reader.read_u32();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
#[test]
|
|
152
|
+
#[should_panic]
|
|
153
|
+
fn test_read_u32_insufficient_bytes_partial() {
|
|
154
|
+
let env = Env::default();
|
|
155
|
+
// Only 3 bytes, need 4 for u32
|
|
156
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03]);
|
|
157
|
+
let mut reader = BufferReader::new(&bytes);
|
|
158
|
+
|
|
159
|
+
// Should panic - not enough bytes
|
|
160
|
+
reader.read_u32();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
#[test]
|
|
164
|
+
#[should_panic]
|
|
165
|
+
fn test_read_u32_insufficient_bytes_one() {
|
|
166
|
+
let env = Env::default();
|
|
167
|
+
// Only 1 byte, need 4 for u32
|
|
168
|
+
let bytes = Bytes::from_array(&env, &[0x01]);
|
|
169
|
+
let mut reader = BufferReader::new(&bytes);
|
|
170
|
+
|
|
171
|
+
// Should panic - not enough bytes
|
|
172
|
+
reader.read_u32();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
#[test]
|
|
176
|
+
#[should_panic]
|
|
177
|
+
fn test_read_u64_insufficient_bytes_empty() {
|
|
178
|
+
let env = Env::default();
|
|
179
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
180
|
+
let mut reader = BufferReader::new(&bytes);
|
|
181
|
+
|
|
182
|
+
// Should panic - no bytes available
|
|
183
|
+
reader.read_u64();
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
#[test]
|
|
187
|
+
#[should_panic]
|
|
188
|
+
fn test_read_u64_insufficient_bytes_partial() {
|
|
189
|
+
let env = Env::default();
|
|
190
|
+
// Only 7 bytes, need 8 for u64
|
|
191
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]);
|
|
192
|
+
let mut reader = BufferReader::new(&bytes);
|
|
193
|
+
|
|
194
|
+
// Should panic - not enough bytes
|
|
195
|
+
reader.read_u64();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
#[test]
|
|
199
|
+
#[should_panic]
|
|
200
|
+
fn test_read_u64_insufficient_bytes_only_four() {
|
|
201
|
+
let env = Env::default();
|
|
202
|
+
// Only 4 bytes, need 8 for u64
|
|
203
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
204
|
+
let mut reader = BufferReader::new(&bytes);
|
|
205
|
+
|
|
206
|
+
// Should panic - not enough bytes
|
|
207
|
+
reader.read_u64();
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
#[test]
|
|
211
|
+
#[should_panic]
|
|
212
|
+
fn test_sequential_reads_run_out_of_bytes() {
|
|
213
|
+
let env = Env::default();
|
|
214
|
+
|
|
215
|
+
// Only enough for u32 and partial u64
|
|
216
|
+
let buffer_array: [u8; 10] = [
|
|
217
|
+
0x01, 0x02, 0x03, 0x04, // u32 (4 bytes)
|
|
218
|
+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // partial u64 (only 6 bytes, need 8)
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
let bytes = Bytes::from_array(&env, &buffer_array);
|
|
222
|
+
let mut reader = BufferReader::new(&bytes);
|
|
223
|
+
|
|
224
|
+
// First read succeeds
|
|
225
|
+
let _val1 = reader.read_u32();
|
|
226
|
+
|
|
227
|
+
// Second read should panic - not enough bytes for u64
|
|
228
|
+
reader.read_u64();
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
#[test]
|
|
232
|
+
#[should_panic]
|
|
233
|
+
fn test_read_after_buffer_exhausted() {
|
|
234
|
+
let env = Env::default();
|
|
235
|
+
// Exactly 4 bytes
|
|
236
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
237
|
+
let mut reader = BufferReader::new(&bytes);
|
|
238
|
+
|
|
239
|
+
// First read succeeds and exhausts the buffer
|
|
240
|
+
let _val = reader.read_u32();
|
|
241
|
+
|
|
242
|
+
// Second read should panic - no bytes left
|
|
243
|
+
reader.read_u32();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Tests for read() method
|
|
247
|
+
#[test]
|
|
248
|
+
fn test_read() {
|
|
249
|
+
let env = Env::default();
|
|
250
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06]);
|
|
251
|
+
let mut reader = BufferReader::new(&bytes);
|
|
252
|
+
|
|
253
|
+
let chunk1 = reader.read_bytes(3);
|
|
254
|
+
assert_eq!(chunk1.len(), 3);
|
|
255
|
+
assert_eq!(chunk1.get(0).unwrap(), 0x01);
|
|
256
|
+
assert_eq!(chunk1.get(1).unwrap(), 0x02);
|
|
257
|
+
assert_eq!(chunk1.get(2).unwrap(), 0x03);
|
|
258
|
+
|
|
259
|
+
let chunk2 = reader.read_bytes(2);
|
|
260
|
+
assert_eq!(chunk2.len(), 2);
|
|
261
|
+
assert_eq!(chunk2.get(0).unwrap(), 0x04);
|
|
262
|
+
assert_eq!(chunk2.get(1).unwrap(), 0x05);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
#[test]
|
|
266
|
+
fn test_read_single_byte() {
|
|
267
|
+
let env = Env::default();
|
|
268
|
+
let bytes = Bytes::from_array(&env, &[0xAB]);
|
|
269
|
+
let mut reader = BufferReader::new(&bytes);
|
|
270
|
+
|
|
271
|
+
let chunk = reader.read_bytes(1);
|
|
272
|
+
assert_eq!(chunk.len(), 1);
|
|
273
|
+
assert_eq!(chunk.get(0).unwrap(), 0xAB);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
#[test]
|
|
277
|
+
fn test_read_entire_buffer() {
|
|
278
|
+
let env = Env::default();
|
|
279
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
280
|
+
let mut reader = BufferReader::new(&bytes);
|
|
281
|
+
|
|
282
|
+
let chunk = reader.read_bytes(4);
|
|
283
|
+
assert_eq!(chunk.len(), 4);
|
|
284
|
+
assert_eq!(chunk.get(0).unwrap(), 0x01);
|
|
285
|
+
assert_eq!(chunk.get(3).unwrap(), 0x04);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Tests for rewind() method
|
|
289
|
+
#[test]
|
|
290
|
+
fn test_rewind() {
|
|
291
|
+
let env = Env::default();
|
|
292
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06]);
|
|
293
|
+
let mut reader = BufferReader::new(&bytes);
|
|
294
|
+
|
|
295
|
+
// Read 4 bytes
|
|
296
|
+
let _chunk1 = reader.read_bytes(4);
|
|
297
|
+
|
|
298
|
+
// Rewind 2 bytes
|
|
299
|
+
reader.rewind(2);
|
|
300
|
+
|
|
301
|
+
// Read again should get bytes starting from position 2
|
|
302
|
+
let chunk2 = reader.read_bytes(2);
|
|
303
|
+
assert_eq!(chunk2.get(0).unwrap(), 0x03);
|
|
304
|
+
assert_eq!(chunk2.get(1).unwrap(), 0x04);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
#[test]
|
|
308
|
+
fn test_rewind_chaining() {
|
|
309
|
+
let env = Env::default();
|
|
310
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
311
|
+
let mut reader = BufferReader::new(&bytes);
|
|
312
|
+
|
|
313
|
+
reader.read_bytes(4);
|
|
314
|
+
// Test that rewind returns &mut Self for chaining
|
|
315
|
+
let chunk = reader.rewind(2).read_bytes(1);
|
|
316
|
+
assert_eq!(chunk.get(0).unwrap(), 0x03);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
#[test]
|
|
320
|
+
fn test_rewind_to_start() {
|
|
321
|
+
let env = Env::default();
|
|
322
|
+
let bytes = Bytes::from_array(&env, &[0xAA, 0xBB, 0xCC]);
|
|
323
|
+
let mut reader = BufferReader::new(&bytes);
|
|
324
|
+
|
|
325
|
+
reader.read_bytes(3);
|
|
326
|
+
reader.rewind(3);
|
|
327
|
+
|
|
328
|
+
let chunk = reader.read_bytes(1);
|
|
329
|
+
assert_eq!(chunk.get(0).unwrap(), 0xAA);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Tests for read_u8() method
|
|
333
|
+
#[test]
|
|
334
|
+
fn test_read_u8() {
|
|
335
|
+
let env = Env::default();
|
|
336
|
+
let bytes = Bytes::from_array(&env, &[0x42]);
|
|
337
|
+
let mut reader = BufferReader::new(&bytes);
|
|
338
|
+
|
|
339
|
+
let value = reader.read_u8();
|
|
340
|
+
assert_eq!(value, 0x42);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
#[test]
|
|
344
|
+
fn test_read_u8_zero() {
|
|
345
|
+
let env = Env::default();
|
|
346
|
+
let bytes = Bytes::from_array(&env, &[0x00]);
|
|
347
|
+
let mut reader = BufferReader::new(&bytes);
|
|
348
|
+
|
|
349
|
+
let value = reader.read_u8();
|
|
350
|
+
assert_eq!(value, 0u8);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
#[test]
|
|
354
|
+
fn test_read_u8_max_value() {
|
|
355
|
+
let env = Env::default();
|
|
356
|
+
let bytes = Bytes::from_array(&env, &[0xFF]);
|
|
357
|
+
let mut reader = BufferReader::new(&bytes);
|
|
358
|
+
|
|
359
|
+
let value = reader.read_u8();
|
|
360
|
+
assert_eq!(value, u8::MAX);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
#[test]
|
|
364
|
+
fn test_read_multiple_u8() {
|
|
365
|
+
let env = Env::default();
|
|
366
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
367
|
+
let mut reader = BufferReader::new(&bytes);
|
|
368
|
+
|
|
369
|
+
assert_eq!(reader.read_u8(), 0x01);
|
|
370
|
+
assert_eq!(reader.read_u8(), 0x02);
|
|
371
|
+
assert_eq!(reader.read_u8(), 0x03);
|
|
372
|
+
assert_eq!(reader.read_u8(), 0x04);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
#[test]
|
|
376
|
+
#[should_panic]
|
|
377
|
+
fn test_read_u8_insufficient_bytes() {
|
|
378
|
+
let env = Env::default();
|
|
379
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
380
|
+
let mut reader = BufferReader::new(&bytes);
|
|
381
|
+
|
|
382
|
+
reader.read_u8();
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Tests for read_u16() method
|
|
386
|
+
#[test]
|
|
387
|
+
fn test_read_u16() {
|
|
388
|
+
let env = Env::default();
|
|
389
|
+
let bytes = Bytes::from_array(&env, &[0x12, 0x34]);
|
|
390
|
+
let mut reader = BufferReader::new(&bytes);
|
|
391
|
+
|
|
392
|
+
let value = reader.read_u16();
|
|
393
|
+
assert_eq!(value, 0x1234u16);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
#[test]
|
|
397
|
+
fn test_read_u16_zero() {
|
|
398
|
+
let env = Env::default();
|
|
399
|
+
let bytes = Bytes::from_array(&env, &[0x00, 0x00]);
|
|
400
|
+
let mut reader = BufferReader::new(&bytes);
|
|
401
|
+
|
|
402
|
+
let value = reader.read_u16();
|
|
403
|
+
assert_eq!(value, 0u16);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
#[test]
|
|
407
|
+
fn test_read_u16_max_value() {
|
|
408
|
+
let env = Env::default();
|
|
409
|
+
let bytes = Bytes::from_array(&env, &[0xFF, 0xFF]);
|
|
410
|
+
let mut reader = BufferReader::new(&bytes);
|
|
411
|
+
|
|
412
|
+
let value = reader.read_u16();
|
|
413
|
+
assert_eq!(value, u16::MAX);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
#[test]
|
|
417
|
+
fn test_read_multiple_u16() {
|
|
418
|
+
let env = Env::default();
|
|
419
|
+
let bytes = Bytes::from_array(&env, &[0x00, 0x01, 0x00, 0x02, 0x00, 0x03]);
|
|
420
|
+
let mut reader = BufferReader::new(&bytes);
|
|
421
|
+
|
|
422
|
+
assert_eq!(reader.read_u16(), 1u16);
|
|
423
|
+
assert_eq!(reader.read_u16(), 2u16);
|
|
424
|
+
assert_eq!(reader.read_u16(), 3u16);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
#[test]
|
|
428
|
+
#[should_panic]
|
|
429
|
+
fn test_read_u16_insufficient_bytes_empty() {
|
|
430
|
+
let env = Env::default();
|
|
431
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
432
|
+
let mut reader = BufferReader::new(&bytes);
|
|
433
|
+
|
|
434
|
+
reader.read_u16();
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
#[test]
|
|
438
|
+
#[should_panic]
|
|
439
|
+
fn test_read_u16_insufficient_bytes_one() {
|
|
440
|
+
let env = Env::default();
|
|
441
|
+
let bytes = Bytes::from_array(&env, &[0x01]);
|
|
442
|
+
let mut reader = BufferReader::new(&bytes);
|
|
443
|
+
|
|
444
|
+
reader.read_u16();
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// Tests for read_u256() method
|
|
448
|
+
#[test]
|
|
449
|
+
fn test_read_u256() {
|
|
450
|
+
let env = Env::default();
|
|
451
|
+
let bytes = Bytes::from_array(
|
|
452
|
+
&env,
|
|
453
|
+
&[
|
|
454
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
455
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
|
|
456
|
+
],
|
|
457
|
+
);
|
|
458
|
+
let mut reader = BufferReader::new(&bytes);
|
|
459
|
+
|
|
460
|
+
let value = reader.read_u256();
|
|
461
|
+
let expected = soroban_sdk::U256::from_u32(&env, 0x01020304);
|
|
462
|
+
assert_eq!(value, expected);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
#[test]
|
|
466
|
+
fn test_read_u256_zero() {
|
|
467
|
+
let env = Env::default();
|
|
468
|
+
let bytes = Bytes::from_array(
|
|
469
|
+
&env,
|
|
470
|
+
&[
|
|
471
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
472
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
473
|
+
],
|
|
474
|
+
);
|
|
475
|
+
let mut reader = BufferReader::new(&bytes);
|
|
476
|
+
|
|
477
|
+
let value = reader.read_u256();
|
|
478
|
+
let expected = soroban_sdk::U256::from_u32(&env, 0);
|
|
479
|
+
assert_eq!(value, expected);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
#[test]
|
|
483
|
+
fn test_read_u256_max_value() {
|
|
484
|
+
let env = Env::default();
|
|
485
|
+
let bytes = Bytes::from_array(
|
|
486
|
+
&env,
|
|
487
|
+
&[
|
|
488
|
+
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
489
|
+
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
490
|
+
],
|
|
491
|
+
);
|
|
492
|
+
let mut reader = BufferReader::new(&bytes);
|
|
493
|
+
|
|
494
|
+
let value = reader.read_u256();
|
|
495
|
+
// Verify it's a large number by checking it's not zero
|
|
496
|
+
assert!(value > soroban_sdk::U256::from_u32(&env, 0));
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
#[test]
|
|
500
|
+
#[should_panic]
|
|
501
|
+
fn test_read_u256_insufficient_bytes() {
|
|
502
|
+
let env = Env::default();
|
|
503
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]); // Only 4 bytes, need 32
|
|
504
|
+
let mut reader = BufferReader::new(&bytes);
|
|
505
|
+
|
|
506
|
+
reader.read_u256();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
// Tests for read_bytes_until_end() method
|
|
510
|
+
#[test]
|
|
511
|
+
fn test_read_bytes_until_end() {
|
|
512
|
+
let env = Env::default();
|
|
513
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06]);
|
|
514
|
+
let mut reader = BufferReader::new(&bytes);
|
|
515
|
+
|
|
516
|
+
reader.read_bytes(2); // Read first 2 bytes
|
|
517
|
+
|
|
518
|
+
let remaining = reader.read_bytes_until_end();
|
|
519
|
+
assert_eq!(remaining.len(), 4);
|
|
520
|
+
assert_eq!(remaining.get(0).unwrap(), 0x03);
|
|
521
|
+
assert_eq!(remaining.get(1).unwrap(), 0x04);
|
|
522
|
+
assert_eq!(remaining.get(2).unwrap(), 0x05);
|
|
523
|
+
assert_eq!(remaining.get(3).unwrap(), 0x06);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
#[test]
|
|
527
|
+
fn test_read_bytes_until_end_entire_buffer() {
|
|
528
|
+
let env = Env::default();
|
|
529
|
+
let bytes = Bytes::from_array(&env, &[0xAA, 0xBB, 0xCC]);
|
|
530
|
+
let mut reader = BufferReader::new(&bytes);
|
|
531
|
+
|
|
532
|
+
let remaining = reader.read_bytes_until_end();
|
|
533
|
+
assert_eq!(remaining.len(), 3);
|
|
534
|
+
assert_eq!(remaining.get(0).unwrap(), 0xAA);
|
|
535
|
+
assert_eq!(remaining.get(1).unwrap(), 0xBB);
|
|
536
|
+
assert_eq!(remaining.get(2).unwrap(), 0xCC);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
#[test]
|
|
540
|
+
fn test_read_bytes_until_end_empty() {
|
|
541
|
+
let env = Env::default();
|
|
542
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02]);
|
|
543
|
+
let mut reader = BufferReader::new(&bytes);
|
|
544
|
+
|
|
545
|
+
reader.read_bytes(2); // Exhaust the buffer
|
|
546
|
+
|
|
547
|
+
let remaining = reader.read_bytes_until_end();
|
|
548
|
+
assert_eq!(remaining.len(), 0);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
#[test]
|
|
552
|
+
fn test_read_bytes_until_end_updates_position() {
|
|
553
|
+
let env = Env::default();
|
|
554
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
555
|
+
let mut reader = BufferReader::new(&bytes);
|
|
556
|
+
|
|
557
|
+
reader.read_bytes(1);
|
|
558
|
+
let _remaining = reader.read_bytes_until_end();
|
|
559
|
+
|
|
560
|
+
// After read_bytes_until_end, position should be at the end
|
|
561
|
+
assert_eq!(reader.remaining(), 0);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// Tests for len() method
|
|
565
|
+
#[test]
|
|
566
|
+
fn test_len() {
|
|
567
|
+
let env = Env::default();
|
|
568
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
569
|
+
let reader = BufferReader::new(&bytes);
|
|
570
|
+
|
|
571
|
+
assert_eq!(reader.len(), 5);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
#[test]
|
|
575
|
+
fn test_len_empty_buffer() {
|
|
576
|
+
let env = Env::default();
|
|
577
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
578
|
+
let reader = BufferReader::new(&bytes);
|
|
579
|
+
|
|
580
|
+
assert_eq!(reader.len(), 0);
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
#[test]
|
|
584
|
+
fn test_len_unchanged_after_read() {
|
|
585
|
+
let env = Env::default();
|
|
586
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
587
|
+
let mut reader = BufferReader::new(&bytes);
|
|
588
|
+
|
|
589
|
+
assert_eq!(reader.len(), 4);
|
|
590
|
+
reader.read_bytes(2);
|
|
591
|
+
assert_eq!(reader.len(), 4); // len() should not change
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
// Tests for remaining() method
|
|
595
|
+
#[test]
|
|
596
|
+
fn test_remaining_initial() {
|
|
597
|
+
let env = Env::default();
|
|
598
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
599
|
+
let reader = BufferReader::new(&bytes);
|
|
600
|
+
|
|
601
|
+
assert_eq!(reader.remaining(), 5);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
#[test]
|
|
605
|
+
fn test_remaining_after_read() {
|
|
606
|
+
let env = Env::default();
|
|
607
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06]);
|
|
608
|
+
let mut reader = BufferReader::new(&bytes);
|
|
609
|
+
|
|
610
|
+
reader.read_bytes(2);
|
|
611
|
+
assert_eq!(reader.remaining(), 4);
|
|
612
|
+
|
|
613
|
+
reader.read_bytes(3);
|
|
614
|
+
assert_eq!(reader.remaining(), 1);
|
|
615
|
+
|
|
616
|
+
reader.read_bytes(1);
|
|
617
|
+
assert_eq!(reader.remaining(), 0);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
#[test]
|
|
621
|
+
fn test_remaining_empty_buffer() {
|
|
622
|
+
let env = Env::default();
|
|
623
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
624
|
+
let reader = BufferReader::new(&bytes);
|
|
625
|
+
|
|
626
|
+
assert_eq!(reader.remaining(), 0);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
#[test]
|
|
630
|
+
fn test_remaining_after_rewind() {
|
|
631
|
+
let env = Env::default();
|
|
632
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
633
|
+
let mut reader = BufferReader::new(&bytes);
|
|
634
|
+
|
|
635
|
+
reader.read_bytes(3);
|
|
636
|
+
assert_eq!(reader.remaining(), 1);
|
|
637
|
+
|
|
638
|
+
reader.rewind(2);
|
|
639
|
+
assert_eq!(reader.remaining(), 3);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
#[test]
|
|
643
|
+
fn test_read_u128() {
|
|
644
|
+
let env = Env::default();
|
|
645
|
+
// Create bytes representing u128 value 0x0102030405060708090a0b0c0d0e0f10
|
|
646
|
+
let bytes = Bytes::from_array(
|
|
647
|
+
&env,
|
|
648
|
+
&[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10],
|
|
649
|
+
);
|
|
650
|
+
let mut reader = BufferReader::new(&bytes);
|
|
651
|
+
|
|
652
|
+
let value = reader.read_u128();
|
|
653
|
+
assert_eq!(value, 0x0102030405060708090a0b0c0d0e0f10u128);
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
#[test]
|
|
657
|
+
fn test_read_u128_zero() {
|
|
658
|
+
let env = Env::default();
|
|
659
|
+
let bytes = Bytes::from_array(&env, &[0x00; 16]);
|
|
660
|
+
let mut reader = BufferReader::new(&bytes);
|
|
661
|
+
|
|
662
|
+
let value = reader.read_u128();
|
|
663
|
+
assert_eq!(value, 0u128);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
#[test]
|
|
667
|
+
fn test_read_u128_max_value() {
|
|
668
|
+
let env = Env::default();
|
|
669
|
+
let bytes = Bytes::from_array(&env, &[0xFF; 16]);
|
|
670
|
+
let mut reader = BufferReader::new(&bytes);
|
|
671
|
+
|
|
672
|
+
let value = reader.read_u128();
|
|
673
|
+
assert_eq!(value, u128::MAX);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
#[test]
|
|
677
|
+
fn test_read_u128_specific_value() {
|
|
678
|
+
let env = Env::default();
|
|
679
|
+
// Test with a specific value: 200000 (0x030d40)
|
|
680
|
+
let mut bytes_array = [0u8; 16];
|
|
681
|
+
// Fill with zeros except for the last 3 bytes
|
|
682
|
+
bytes_array[13] = 0x03;
|
|
683
|
+
bytes_array[14] = 0x0d;
|
|
684
|
+
bytes_array[15] = 0x40;
|
|
685
|
+
let bytes = Bytes::from_array(&env, &bytes_array);
|
|
686
|
+
let mut reader = BufferReader::new(&bytes);
|
|
687
|
+
|
|
688
|
+
let value = reader.read_u128();
|
|
689
|
+
assert_eq!(value, 200000u128);
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
#[test]
|
|
693
|
+
fn test_read_bytes_n() {
|
|
694
|
+
let env = Env::default();
|
|
695
|
+
// Create 32 bytes with a pattern
|
|
696
|
+
let bytes = Bytes::from_array(
|
|
697
|
+
&env,
|
|
698
|
+
&[
|
|
699
|
+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
|
|
700
|
+
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
|
|
701
|
+
],
|
|
702
|
+
);
|
|
703
|
+
let mut reader = BufferReader::new(&bytes);
|
|
704
|
+
|
|
705
|
+
let value = reader.read_bytes_n::<32>();
|
|
706
|
+
let expected = BytesN::<32>::from_array(
|
|
707
|
+
&env,
|
|
708
|
+
&[
|
|
709
|
+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
|
|
710
|
+
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
|
|
711
|
+
],
|
|
712
|
+
);
|
|
713
|
+
assert_eq!(value, expected);
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
#[test]
|
|
717
|
+
fn test_read_bytes_n_zeros() {
|
|
718
|
+
let env = Env::default();
|
|
719
|
+
let bytes = Bytes::from_array(&env, &[0x00; 32]);
|
|
720
|
+
let mut reader = BufferReader::new(&bytes);
|
|
721
|
+
|
|
722
|
+
let value = reader.read_bytes_n::<32>();
|
|
723
|
+
let expected = BytesN::<32>::from_array(&env, &[0x00; 32]);
|
|
724
|
+
assert_eq!(value, expected);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
#[test]
|
|
728
|
+
fn test_read_bytes_n_all_ones() {
|
|
729
|
+
let env = Env::default();
|
|
730
|
+
let bytes = Bytes::from_array(&env, &[0xFF; 32]);
|
|
731
|
+
let mut reader = BufferReader::new(&bytes);
|
|
732
|
+
|
|
733
|
+
let value = reader.read_bytes_n::<32>();
|
|
734
|
+
let expected = BytesN::<32>::from_array(&env, &[0xFF; 32]);
|
|
735
|
+
assert_eq!(value, expected);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
#[test]
|
|
739
|
+
fn test_read_bytes_n_different_sizes() {
|
|
740
|
+
let env = Env::default();
|
|
741
|
+
// Create buffer with 4 + 8 + 16 = 28 bytes
|
|
742
|
+
let bytes = Bytes::from_array(
|
|
743
|
+
&env,
|
|
744
|
+
&[
|
|
745
|
+
0x01, 0x02, 0x03, 0x04, // 4 bytes
|
|
746
|
+
0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, // 8 bytes
|
|
747
|
+
0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
|
|
748
|
+
0x1c, // 16 bytes
|
|
749
|
+
],
|
|
750
|
+
);
|
|
751
|
+
let mut reader = BufferReader::new(&bytes);
|
|
752
|
+
|
|
753
|
+
let val4: BytesN<4> = reader.read_bytes_n();
|
|
754
|
+
assert_eq!(val4, BytesN::<4>::from_array(&env, &[0x01, 0x02, 0x03, 0x04]));
|
|
755
|
+
|
|
756
|
+
let val8: BytesN<8> = reader.read_bytes_n();
|
|
757
|
+
assert_eq!(val8, BytesN::<8>::from_array(&env, &[0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c]));
|
|
758
|
+
|
|
759
|
+
let val16: BytesN<16> = reader.read_bytes_n();
|
|
760
|
+
assert_eq!(
|
|
761
|
+
val16,
|
|
762
|
+
BytesN::<16>::from_array(
|
|
763
|
+
&env,
|
|
764
|
+
&[0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c]
|
|
765
|
+
)
|
|
766
|
+
);
|
|
767
|
+
|
|
768
|
+
assert_eq!(reader.remaining(), 0);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
#[test]
|
|
772
|
+
fn test_read_bytes_n_address_pattern() {
|
|
773
|
+
let env = Env::default();
|
|
774
|
+
// Test with a typical Ethereum-style address padded to 32 bytes
|
|
775
|
+
let bytes = Bytes::from_array(
|
|
776
|
+
&env,
|
|
777
|
+
&[
|
|
778
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xf3, 0x9f, 0xd6, 0xe5, 0x1a, 0xad, 0x88, 0xf6, 0xf4, 0xce, 0x6a, 0xb8,
|
|
779
|
+
0x82, 0x72, 0x79, 0xcf, 0xff, 0xb9, 0x22, 0x66,
|
|
780
|
+
],
|
|
781
|
+
);
|
|
782
|
+
let mut reader = BufferReader::new(&bytes);
|
|
783
|
+
|
|
784
|
+
let value = reader.read_bytes_n::<32>();
|
|
785
|
+
let expected = BytesN::<32>::from_array(
|
|
786
|
+
&env,
|
|
787
|
+
&[
|
|
788
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xf3, 0x9f, 0xd6, 0xe5, 0x1a, 0xad, 0x88, 0xf6, 0xf4, 0xce, 0x6a, 0xb8,
|
|
789
|
+
0x82, 0x72, 0x79, 0xcf, 0xff, 0xb9, 0x22, 0x66,
|
|
790
|
+
],
|
|
791
|
+
);
|
|
792
|
+
assert_eq!(value, expected);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
#[test]
|
|
796
|
+
fn test_sequential_reads_with_u128_and_bytes32() {
|
|
797
|
+
let env = Env::default();
|
|
798
|
+
|
|
799
|
+
// Create a buffer with:
|
|
800
|
+
// - u8: 0x01
|
|
801
|
+
// - u16: 0x0011
|
|
802
|
+
// - u128: 200000
|
|
803
|
+
// - bytes32: all 0x42s
|
|
804
|
+
let mut final_bytes = Bytes::new(&env);
|
|
805
|
+
|
|
806
|
+
// u8
|
|
807
|
+
final_bytes.push_back(0x01);
|
|
808
|
+
|
|
809
|
+
// u16
|
|
810
|
+
final_bytes.extend_from_slice(&[0x00, 0x11]);
|
|
811
|
+
|
|
812
|
+
// u128 (200000)
|
|
813
|
+
final_bytes.extend_from_slice(&200000u128.to_be_bytes());
|
|
814
|
+
|
|
815
|
+
// bytes32
|
|
816
|
+
final_bytes.extend_from_slice(&[0x42; 32]);
|
|
817
|
+
|
|
818
|
+
let mut reader = BufferReader::new(&final_bytes);
|
|
819
|
+
|
|
820
|
+
// Read in sequence
|
|
821
|
+
let val1 = reader.read_u8();
|
|
822
|
+
assert_eq!(val1, 0x01);
|
|
823
|
+
|
|
824
|
+
let val2 = reader.read_u16();
|
|
825
|
+
assert_eq!(val2, 0x0011);
|
|
826
|
+
|
|
827
|
+
let val3 = reader.read_u128();
|
|
828
|
+
assert_eq!(val3, 200000u128);
|
|
829
|
+
|
|
830
|
+
let val4 = reader.read_bytes_n::<32>();
|
|
831
|
+
let expected = BytesN::<32>::from_array(&env, &[0x42; 32]);
|
|
832
|
+
assert_eq!(val4, expected);
|
|
833
|
+
|
|
834
|
+
// Should have read everything
|
|
835
|
+
assert_eq!(reader.remaining(), 0);
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
#[test]
|
|
839
|
+
fn test_read_arbitrary_size() {
|
|
840
|
+
let env = Env::default();
|
|
841
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]);
|
|
842
|
+
let mut reader = BufferReader::new(&bytes);
|
|
843
|
+
|
|
844
|
+
// Read 4 bytes
|
|
845
|
+
let chunk1 = reader.read_bytes(4);
|
|
846
|
+
assert_eq!(chunk1.len(), 4);
|
|
847
|
+
assert_eq!(chunk1.get(0).unwrap(), 0x01);
|
|
848
|
+
assert_eq!(chunk1.get(3).unwrap(), 0x04);
|
|
849
|
+
|
|
850
|
+
// Read remaining 4 bytes
|
|
851
|
+
let chunk2 = reader.read_bytes(4);
|
|
852
|
+
assert_eq!(chunk2.len(), 4);
|
|
853
|
+
assert_eq!(chunk2.get(0).unwrap(), 0x05);
|
|
854
|
+
assert_eq!(chunk2.get(3).unwrap(), 0x08);
|
|
855
|
+
|
|
856
|
+
// All bytes consumed
|
|
857
|
+
assert_eq!(reader.remaining(), 0);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
#[test]
|
|
861
|
+
#[should_panic]
|
|
862
|
+
fn test_read_insufficient_bytes() {
|
|
863
|
+
let env = Env::default();
|
|
864
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
865
|
+
let mut reader = BufferReader::new(&bytes);
|
|
866
|
+
|
|
867
|
+
// Try to read more bytes than available
|
|
868
|
+
// Should panic with InsufficientBytes error
|
|
869
|
+
reader.read_bytes(10);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
#[test]
|
|
873
|
+
#[should_panic]
|
|
874
|
+
fn test_read_insufficient_bytes_after_partial_read() {
|
|
875
|
+
let env = Env::default();
|
|
876
|
+
let bytes = Bytes::from_array(&env, &[0x01, 0x02, 0x03, 0x04]);
|
|
877
|
+
let mut reader = BufferReader::new(&bytes);
|
|
878
|
+
|
|
879
|
+
// Read 2 bytes successfully
|
|
880
|
+
let _chunk = reader.read_bytes(2);
|
|
881
|
+
assert_eq!(reader.remaining(), 2);
|
|
882
|
+
|
|
883
|
+
// Try to read 3 bytes when only 2 remain
|
|
884
|
+
// Should panic with InsufficientBytes error
|
|
885
|
+
reader.read_bytes(3);
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
// Tests for read_address() method
|
|
889
|
+
#[test]
|
|
890
|
+
fn test_read_address_contract_roundtrip() {
|
|
891
|
+
let env = Env::default();
|
|
892
|
+
|
|
893
|
+
// Address::generate() creates a Contract address
|
|
894
|
+
let original_address = Address::generate(&env);
|
|
895
|
+
let payload = original_address.to_payload().unwrap();
|
|
896
|
+
assert!(matches!(payload, AddressPayload::ContractIdHash(_)));
|
|
897
|
+
|
|
898
|
+
// Serialize using BufferWriter, then read back
|
|
899
|
+
let mut writer = BufferWriter::new(&env);
|
|
900
|
+
writer.write_address(&original_address);
|
|
901
|
+
let bytes = writer.to_bytes();
|
|
902
|
+
|
|
903
|
+
let mut reader = BufferReader::new(&bytes);
|
|
904
|
+
let read_address = reader.read_address();
|
|
905
|
+
|
|
906
|
+
assert_eq!(read_address, original_address);
|
|
907
|
+
assert_eq!(reader.remaining(), 0);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
#[test]
|
|
911
|
+
fn test_read_address_account_roundtrip() {
|
|
912
|
+
let env = Env::default();
|
|
913
|
+
|
|
914
|
+
// Create an account address from a 32-byte payload
|
|
915
|
+
let account_payload = BytesN::<32>::from_array(
|
|
916
|
+
&env,
|
|
917
|
+
&[
|
|
918
|
+
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
|
|
919
|
+
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
|
|
920
|
+
],
|
|
921
|
+
);
|
|
922
|
+
let original_address = Address::from_payload(&env, AddressPayload::AccountIdPublicKeyEd25519(account_payload));
|
|
923
|
+
let payload = original_address.to_payload().unwrap();
|
|
924
|
+
assert!(matches!(payload, AddressPayload::AccountIdPublicKeyEd25519(_)));
|
|
925
|
+
|
|
926
|
+
// Serialize using BufferWriter, then read back
|
|
927
|
+
let mut writer = BufferWriter::new(&env);
|
|
928
|
+
writer.write_address(&original_address);
|
|
929
|
+
let bytes = writer.to_bytes();
|
|
930
|
+
|
|
931
|
+
let mut reader = BufferReader::new(&bytes);
|
|
932
|
+
let read_address = reader.read_address();
|
|
933
|
+
|
|
934
|
+
assert_eq!(read_address, original_address);
|
|
935
|
+
assert_eq!(reader.remaining(), 0);
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
#[test]
|
|
939
|
+
fn test_read_address_mixed_types_roundtrip() {
|
|
940
|
+
let env = Env::default();
|
|
941
|
+
|
|
942
|
+
// Generate contract address
|
|
943
|
+
let contract_addr = Address::generate(&env);
|
|
944
|
+
|
|
945
|
+
// Create account address
|
|
946
|
+
let account_payload = BytesN::<32>::from_array(&env, &[0x42; 32]);
|
|
947
|
+
let account_addr = Address::from_payload(&env, AddressPayload::AccountIdPublicKeyEd25519(account_payload));
|
|
948
|
+
|
|
949
|
+
// Serialize both addresses (33 * 2 = 66 bytes)
|
|
950
|
+
let mut writer = BufferWriter::new(&env);
|
|
951
|
+
writer.write_address(&contract_addr);
|
|
952
|
+
writer.write_address(&account_addr);
|
|
953
|
+
let bytes = writer.to_bytes();
|
|
954
|
+
|
|
955
|
+
assert_eq!(bytes.len(), 66); // 33 bytes per address
|
|
956
|
+
|
|
957
|
+
let mut reader = BufferReader::new(&bytes);
|
|
958
|
+
assert_eq!(reader.read_address(), contract_addr);
|
|
959
|
+
assert_eq!(reader.read_address(), account_addr);
|
|
960
|
+
assert_eq!(reader.remaining(), 0);
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
#[test]
|
|
964
|
+
fn test_read_address_with_other_data_roundtrip() {
|
|
965
|
+
let env = Env::default();
|
|
966
|
+
|
|
967
|
+
let original_address = Address::generate(&env);
|
|
968
|
+
|
|
969
|
+
// Create buffer: u32 + address (33 bytes) + u64
|
|
970
|
+
let mut writer = BufferWriter::new(&env);
|
|
971
|
+
writer.write_u32(0x12345678);
|
|
972
|
+
writer.write_address(&original_address);
|
|
973
|
+
writer.write_u64(0xAABBCCDDEEFF0011);
|
|
974
|
+
let bytes = writer.to_bytes();
|
|
975
|
+
|
|
976
|
+
assert_eq!(bytes.len(), 4 + 33 + 8);
|
|
977
|
+
|
|
978
|
+
let mut reader = BufferReader::new(&bytes);
|
|
979
|
+
assert_eq!(reader.read_u32(), 0x12345678);
|
|
980
|
+
assert_eq!(reader.read_address(), original_address);
|
|
981
|
+
assert_eq!(reader.read_u64(), 0xAABBCCDDEEFF0011);
|
|
982
|
+
assert_eq!(reader.remaining(), 0);
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
#[test]
|
|
986
|
+
#[should_panic]
|
|
987
|
+
fn test_read_address_insufficient_bytes_empty() {
|
|
988
|
+
let env = Env::default();
|
|
989
|
+
let bytes = Bytes::from_array(&env, &[]);
|
|
990
|
+
let mut reader = BufferReader::new(&bytes);
|
|
991
|
+
|
|
992
|
+
// Should panic - no bytes available (need 33)
|
|
993
|
+
reader.read_address();
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
#[test]
|
|
997
|
+
#[should_panic]
|
|
998
|
+
fn test_read_address_insufficient_bytes_partial() {
|
|
999
|
+
let env = Env::default();
|
|
1000
|
+
// Only 32 bytes, need 33
|
|
1001
|
+
let bytes = Bytes::from_array(&env, &[0x00; 32]);
|
|
1002
|
+
let mut reader = BufferReader::new(&bytes);
|
|
1003
|
+
|
|
1004
|
+
// Should panic - not enough bytes
|
|
1005
|
+
reader.read_address();
|
|
1006
|
+
}
|