// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract GasLimitTest {
    address payable receiver;
    constructor(){
        address mynew = address(new GasLimitTestReceiver());
        receiver = payable(mynew);
    }
    function send() public payable{
        receiver.transfer(msg.value);
    }
    function expensiveTest() public{
        GasLimitTestReceiver(receiver).expensive();
    }
    function getDataLength() public returns (uint256)  {
        return GasLimitTestReceiver(receiver).getDataLength();
    }
}

contract GasLimitTestReceiver {
    uint256[] public data;
    fallback() external payable {
        expensive();
    }
    function expensive() public{
        for (uint256 i = 0; i < 100; i++) {
            data.push(i);
        }
    }
    function getDataLength() public view returns (uint256) {
        return data.length;
    }
}