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