Skip to content

Commit

Permalink
Add tests to ensure None is returned
Browse files Browse the repository at this point in the history
  • Loading branch information
bitzoic committed Aug 12, 2024
1 parent 7ad80e5 commit ecf765d
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 47 deletions.
25 changes: 18 additions & 7 deletions sway-lib-std/src/inputs.sw
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ impl Eq for Input {
/// }
/// ```
pub fn input_type(index: u64) -> Option<Input> {
if index >= input_count().as_u64() {
return None
}

match __gtf::<u8>(index, GTF_INPUT_TYPE) {
0u8 => Some(Input::Coin),
1u8 => Some(Input::Contract),
Expand Down Expand Up @@ -134,21 +138,25 @@ pub fn input_count() -> u16 {
///
/// # Returns
///
/// * [u64] - The pointer of the input at `index`.
/// * [Option<u64>] - The pointer of the input at `index`.
///
/// # Examples
///
/// ```sway
/// use std::inputs::input_pointer;
///
/// fn foo() {
/// let input_pointer = input_pointer(0);
/// let input_pointer = input_pointer(0).unwrap();
/// }
/// ```
pub fn input_pointer(index: u64) -> u64 {
pub fn input_pointer(index: u64) -> Option<u64> {
if index >= input_count().as_u64() {
return None
}

match tx_type() {
Transaction::Script => __gtf::<u64>(index, GTF_SCRIPT_INPUT_AT_INDEX),
Transaction::Create => __gtf::<u64>(index, GTF_CREATE_INPUT_AT_INDEX),
Transaction::Script => Some(__gtf::<u64>(index, GTF_SCRIPT_INPUT_AT_INDEX)),
Transaction::Create => Some(__gtf::<u64>(index, GTF_CREATE_INPUT_AT_INDEX)),
}
}

Expand Down Expand Up @@ -516,8 +524,11 @@ pub fn input_message_recipient(index: u64) -> Option<Address> {
/// assert(input_message_nonce != b256::zero());
/// }
/// ```
pub fn input_message_nonce(index: u64) -> b256 {
__gtf::<b256>(index, GTF_INPUT_MESSAGE_NONCE)
pub fn input_message_nonce(index: u64) -> Option<b256> {
match input_type(index) {
Some(Input::Message) => Some(__gtf::<b256>(index, GTF_INPUT_MESSAGE_NONCE)),
_ => None,
}
}

/// Gets the length of the input message at `index`.
Expand Down
56 changes: 28 additions & 28 deletions test/src/sdk-harness/test_artifacts/tx_contract/src/main.sw
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,17 @@ abi TxContractTest {
fn get_tx_script_bytecode_hash() -> b256;

fn get_input_type(index: u64) -> Option<Input>;
fn get_tx_input_pointer(index: u64) -> u64;
fn get_input_coin_owner(index: u64) -> Address;
fn get_input_amount(index: u64) -> u64;
fn get_tx_input_pointer(index: u64) -> Option<u64>;
fn get_input_coin_owner(index: u64) -> Option<Address>;
fn get_input_amount(index: u64) -> Option<u64>;
fn get_tx_input_predicate_data_pointer(index: u64) -> u64;
fn get_input_message_sender(index: u64) -> Address;
fn get_input_message_recipient(index: u64) -> Address;
fn get_input_message_nonce(index: u64) -> b256;
fn get_input_witness_index(index: u64) -> u16;
fn get_input_message_data_length(index: u64) -> u64;
fn get_input_predicate_length(index: u64) -> u64;
fn get_input_predicate_data_length(index: u64) -> u64;
fn get_input_message_sender(index: u64) -> Option<Address>;
fn get_input_message_recipient(index: u64) -> Option<Address>;
fn get_input_message_nonce(index: u64) -> Option<b256>;
fn get_input_witness_index(index: u64) -> Option<u16>;
fn get_input_message_data_length(index: u64) -> Option<u64>;
fn get_input_predicate_length(index: u64) -> Option<u64>;
fn get_input_predicate_data_length(index: u64) -> Option<u64>;
fn get_input_message_data(index: u64, offset: u64, expected: [u8; 3]) -> bool;
fn get_input_predicate(index: u64, bytecode: Vec<u8>) -> bool;

Expand Down Expand Up @@ -113,43 +113,43 @@ impl TxContractTest for Contract {
fn get_tx_script_bytecode_hash() -> b256 {
tx_script_bytecode_hash()
}
fn get_tx_input_pointer(index: u64) -> u64 {
fn get_tx_input_pointer(index: u64) -> Option<u64> {
input_pointer(index)
}
fn get_input_type(index: u64) -> Option<Input> {
input_type(index)
}
fn get_input_coin_owner(index: u64) -> Address {
input_coin_owner(index).unwrap()
fn get_input_coin_owner(index: u64) -> Option<Address> {
input_coin_owner(index)
}
fn get_input_amount(index: u64) -> u64 {
input_amount(index).unwrap()
fn get_input_amount(index: u64) -> Option<u64> {
input_amount(index)
}
fn get_tx_input_predicate_data_pointer(index: u64) -> u64 {
asm(r1: input_predicate_data_pointer(index).unwrap()) {
r1: u64
}
}
fn get_input_message_sender(index: u64) -> Address {
input_message_sender(index).unwrap()
fn get_input_message_sender(index: u64) -> Option<Address> {
input_message_sender(index)
}
fn get_input_message_recipient(index: u64) -> Address {
input_message_recipient(index).unwrap()
fn get_input_message_recipient(index: u64) -> Option<Address> {
input_message_recipient(index)
}
fn get_input_message_nonce(index: u64) -> b256 {
fn get_input_message_nonce(index: u64) -> Option<b256> {
input_message_nonce(index)
}
fn get_input_witness_index(index: u64) -> u16 {
input_witness_index(index).unwrap()
fn get_input_witness_index(index: u64) -> Option<u16> {
input_witness_index(index)
}
fn get_input_message_data_length(index: u64) -> u64 {
input_message_data_length(index).unwrap()
fn get_input_message_data_length(index: u64) -> Option<u64> {
input_message_data_length(index)
}
fn get_input_predicate_length(index: u64) -> u64 {
input_predicate_length(index).unwrap()
fn get_input_predicate_length(index: u64) -> Option<u64> {
input_predicate_length(index)
}
fn get_input_predicate_data_length(index: u64) -> u64 {
input_predicate_data_length(index).unwrap()
fn get_input_predicate_data_length(index: u64) -> Option<u64> {
input_predicate_data_length(index)
}
fn get_input_message_data(index: u64, offset: u64, expected: [u8; 3]) -> bool {
let data = match input_message_data(index, offset) {
Expand Down
4 changes: 2 additions & 2 deletions test/src/sdk-harness/test_projects/auth/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ async fn can_get_predicate_address() {

// Setup predicate.
let hex_predicate_address: &str =
"0xd7c64424d48025fa6047a7508c30c2ea3a7c126e6efcc93f6195f21a48742a1f";
"0x421ed9a7b208036e67dc95b7f0c0ae085f5c0b3ee55af9719d146ea6a59e0716";
let predicate_address =
Address::from_str(hex_predicate_address).expect("failed to create Address from string");
let predicate_bech32_address = Bech32Address::from(predicate_address);
Expand Down Expand Up @@ -322,7 +322,7 @@ async fn when_incorrect_predicate_address_passed() {
async fn can_get_predicate_address_in_message() {
// Setup predicate address.
let hex_predicate_address: &str =
"0xd7c64424d48025fa6047a7508c30c2ea3a7c126e6efcc93f6195f21a48742a1f";
"0x421ed9a7b208036e67dc95b7f0c0ae085f5c0b3ee55af9719d146ea6a59e0716";
let predicate_address =
Address::from_str(hex_predicate_address).expect("failed to create Address from string");
let predicate_bech32_address = Bech32Address::from(predicate_address);
Expand Down
Loading

0 comments on commit ecf765d

Please sign in to comment.