infrastructure-upgrade/lib/v3-periphery/contracts/test/MockObservable.sol

49 lines
1.7 KiB
Solidity
Raw Normal View History

2023-04-08 21:46:18 +03:00
// SPDX-License-Identifier: UNLICENSED
pragma solidity =0.7.6;
contract MockObservable {
Observation private observation0;
Observation private observation1;
struct Observation {
uint32 secondsAgo;
int56 tickCumulatives;
uint160 secondsPerLiquidityCumulativeX128s;
}
constructor(
uint32[] memory secondsAgos,
int56[] memory tickCumulatives,
uint160[] memory secondsPerLiquidityCumulativeX128s
) {
require(
secondsAgos.length == 2 && tickCumulatives.length == 2 && secondsPerLiquidityCumulativeX128s.length == 2,
'Invalid test case size'
);
observation0 = Observation(secondsAgos[0], tickCumulatives[0], secondsPerLiquidityCumulativeX128s[0]);
observation1 = Observation(secondsAgos[1], tickCumulatives[1], secondsPerLiquidityCumulativeX128s[1]);
}
function observe(uint32[] calldata secondsAgos)
external
view
returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s)
{
require(
secondsAgos[0] == observation0.secondsAgo && secondsAgos[1] == observation1.secondsAgo,
'Invalid test case'
);
int56[] memory _tickCumulatives = new int56[](2);
_tickCumulatives[0] = observation0.tickCumulatives;
_tickCumulatives[1] = observation1.tickCumulatives;
uint160[] memory _secondsPerLiquidityCumulativeX128s = new uint160[](2);
_secondsPerLiquidityCumulativeX128s[0] = observation0.secondsPerLiquidityCumulativeX128s;
_secondsPerLiquidityCumulativeX128s[1] = observation1.secondsPerLiquidityCumulativeX128s;
return (_tickCumulatives, _secondsPerLiquidityCumulativeX128s);
}
}