all files / plugins/assets/aave/ RayMathNoRounding.sol

100% Statements 8/8
60% Branches 6/10
100% Functions 3/3
100% Lines 8/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                      223× 47×   176× 176×       212× 212× 212×       317×      
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
 
import { Errors } from "@aave/protocol-v2/contracts/protocol/libraries/helpers/Errors.sol";
 
library RayMathNoRounding {
    uint256 internal constant RAY = 1e27;
    uint256 internal constant WAD_RAY_RATIO = 1e9;
 
    function rayMulNoRounding(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0 || b == 0) {
            return 0;
        }
        Erequire(a <= type(uint256).max / b, Errors.MATH_MULTIPLICATION_OVERFLOW);
        return (a * b) / RAY;
    }
 
    function rayDivNoRounding(uint256 a, uint256 b) internal pure returns (uint256) {
        Erequire(b != 0, Errors.MATH_DIVISION_BY_ZERO);
        Erequire(a <= (type(uint256).max) / RAY, Errors.MATH_MULTIPLICATION_OVERFLOW);
        return (a * RAY) / b;
    }
 
    function rayToWadNoRounding(uint256 a) internal pure returns (uint256) {
        return a / WAD_RAY_RATIO;
    }
}