from freqtrade.util import FtPrecise


ws = FtPrecise('-1.123e-6')
ws = FtPrecise('-1.123e-6')
xs = FtPrecise('0.00000002')
ys = FtPrecise('69696900000')
zs = FtPrecise('0')


def test_FtPrecise():
    assert ys * xs == '1393.938'
    assert xs * ys == '1393.938'

    assert ys + xs == '69696900000.00000002'
    assert xs + ys == '69696900000.00000002'
    assert xs - ys == '-69696899999.99999998'
    assert ys - xs == '69696899999.99999998'
    assert xs / ys == '0'
    assert ys / xs == '3484845000000000000'

    assert ws * xs == '-0.00000000000002246'
    assert xs * ws == '-0.00000000000002246'

    assert ws + xs == '-0.000001103'
    assert xs + ws == '-0.000001103'

    assert xs - ws == '0.000001143'
    assert ws - xs == '-0.000001143'

    assert xs / ws == '-0.017809439002671415'
    assert ws / xs == '-56.15'

    assert zs * ws == '0'
    assert zs * xs == '0'
    assert zs * ys == '0'
    assert ws * zs == '0'
    assert xs * zs == '0'
    assert ys * zs == '0'

    assert zs + ws == '-0.000001123'
    assert zs + xs == '0.00000002'
    assert zs + ys == '69696900000'
    assert ws + zs == '-0.000001123'
    assert xs + zs == '0.00000002'
    assert ys + zs == '69696900000'

    assert abs(FtPrecise('-500.1')) == '500.1'
    assert abs(FtPrecise('213')) == '213'

    assert abs(FtPrecise('-500.1')) == '500.1'
    assert -FtPrecise('213') == '-213'

    assert FtPrecise('10.1') % FtPrecise('0.5') == '0.1'
    assert FtPrecise('5550') % FtPrecise('120') == '30'

    assert FtPrecise('-0.0') == FtPrecise('0')
    assert FtPrecise('5.534000') == FtPrecise('5.5340')

    assert min(FtPrecise('-3.1415'), FtPrecise('-2')) == '-3.1415'

    assert max(FtPrecise('3.1415'), FtPrecise('-2')) == '3.1415'

    assert FtPrecise('2') > FtPrecise('1.2345')
    assert not FtPrecise('-3.1415') > FtPrecise('-2')
    assert not FtPrecise('3.1415') > FtPrecise('3.1415')
    assert FtPrecise.string_gt('3.14150000000000000000001', '3.1415')

    assert FtPrecise('3.1415') >= FtPrecise('3.1415')
    assert FtPrecise('3.14150000000000000000001') >= FtPrecise('3.1415')

    assert not FtPrecise('3.1415') < FtPrecise('3.1415')

    assert FtPrecise('3.1415') <= FtPrecise('3.1415')
    assert FtPrecise('3.1415') <= FtPrecise('3.14150000000000000000001')

    assert FtPrecise(213) == '213'
    assert FtPrecise(-213) == '-213'
    assert str(FtPrecise(-213)) == '-213'
    assert FtPrecise(213.2) == '213.2'
    assert float(FtPrecise(213.2)) == 213.2
    assert float(FtPrecise(-213.2)) == -213.2