|
| 1 | +use forge_runner::forge_config::ForgeTrackedResource; |
| 2 | +use indoc::indoc; |
| 3 | +use std::path::Path; |
| 4 | +use test_utils::runner::{Contract, assert_passed}; |
| 5 | +use test_utils::running_tests::run_test_case; |
| 6 | +use test_utils::test_case; |
| 7 | + |
| 8 | +#[test] |
| 9 | +fn test_get_available_gas() { |
| 10 | + let test = test_case!( |
| 11 | + indoc!( |
| 12 | + r#" |
| 13 | + use snforge_std::{declare, DeclareResultTrait, ContractClassTrait}; |
| 14 | +
|
| 15 | + #[test] |
| 16 | + fn check_available_gas() { |
| 17 | + let contract = declare("HelloStarknet").unwrap().contract_class().clone(); |
| 18 | + let (contract_address, _) = contract.deploy(@ArrayTrait::new()).unwrap(); |
| 19 | +
|
| 20 | + let gas_before = core::testing::get_available_gas(); |
| 21 | + core::gas::withdraw_gas().unwrap(); |
| 22 | +
|
| 23 | + starknet::syscalls::call_contract_syscall( |
| 24 | + contract_address, selector!("increase_balance"), array![10].span(), |
| 25 | + ).unwrap(); |
| 26 | +
|
| 27 | + let gas_after = core::testing::get_available_gas(); |
| 28 | + core::gas::withdraw_gas().unwrap(); |
| 29 | +
|
| 30 | + let gas_diff = gas_before - gas_after; |
| 31 | +
|
| 32 | + // call_contract syscall: 91_560 gas |
| 33 | + // storage_write and storage_read syscalls: 10_000 gas each |
| 34 | + let min_expected_gas = 91_560 + 10_000 * 2; |
| 35 | +
|
| 36 | + // Check that gas used is above the expected minimum |
| 37 | + assert(gas_diff > min_expected_gas, 'Incorrect gas'); |
| 38 | +
|
| 39 | + // Allow an arbitrary margin of 10_000 gas |
| 40 | + assert(min_expected_gas + 10_000 > gas_diff, 'Incorrect gas'); |
| 41 | + } |
| 42 | + "# |
| 43 | + ), |
| 44 | + Contract::from_code_path( |
| 45 | + "HelloStarknet".to_string(), |
| 46 | + Path::new("tests/data/contracts/hello_starknet.cairo"), |
| 47 | + ) |
| 48 | + .unwrap() |
| 49 | + ); |
| 50 | + |
| 51 | + let result = run_test_case(&test, ForgeTrackedResource::SierraGas); |
| 52 | + |
| 53 | + assert_passed(&result); |
| 54 | +} |
0 commit comments