I've added more operator overloads to WiPyFloat (see above), so that this sort of thing now works:
It's just under 6 Kb at the moment, as measured by gc.mem_free().
Code: Select all
# Float_tests.py
# Last modified: 27 Aug 2016
# J.G.Davies, Jacobus Systems Ltd., Brighton & Hove, UK.
# This code is hereby released as Public Domain. I would appreciate an acknowledgement if you find it useful.
from WiPyFloat import Float
def test1():
# 'load' and 'str' methods.
print("test1 - load / str")
f1 = Float()
f1.load("1.3")
print(PassFail(f1.str() == "1.3"), "1.3 ->", f1, f1.str("E"))
f1.load("-1.3")
print(PassFail(f1.str() == "-1.3"), "-1.3 ->", f1, f1.str("E"))
f1.load("2000.05")
print(PassFail(f1.str() == "2000.05"), "2000.05 ->", f1, f1.str("E"))
f1.load("0.01")
print(PassFail(f1.str() == "0.01"), "0.01 ->", f1, f1.str("E"))
f1.load("0.0123")
print(PassFail(f1.str() == "0.0123"), "0.0123 ->", f1, f1.str("E"))
f1.load("0.00123")
print(PassFail(f1.str() == "0.00123"), "0.00123 ->", f1, f1.str("E"))
f1.load("1.23e-3")
print(PassFail(f1.str() == "0.00123"), "1.23e-3 ->", f1, f1.str("E"))
f1.load("1.23e6")
print(PassFail(f1.str() == "1230000"), "1.23e6 ->", f1, f1.str("E"))
f1.load("5e6")
print(PassFail(f1.str() == "5000000"), "5e6 ->", f1, f1.str("E"))
print("")
return True
def test2():
# Addition.
print("test2 - Addition")
f1 = Float()
f2 = Float()
f1.load("2000.05")
f2.load("0.001")
f3 = Float.add(f1, f2)
print(PassFail(f3.str() == "2000.051"), f1, "+", f2, "->", f3, f3.str("E"))
f1.load("0.1")
f2.load("0.2")
f3 = Float.add(f1, f2)
print(PassFail(f3.str() == "0.3"), f1, "+", f2, "->", f3, f3.str("E"))
f1.load("500")
f2.load("600")
f3 = Float.add(f1, f2)
print(PassFail(f3.str() == "1100"), f1, "+", f2, "->", f3, f3.str("E"))
f1.load("500")
f2.load("-600")
f3 = Float.add(f1, f2)
print(PassFail(f3.str() == "-100"), f1, "+", f2, "->", f3, f3.str("E"))
f1.load("-500")
f2.load("600")
f3 = Float.add(f1, f2)
print(PassFail(f3.str() == "100"), f1, "+", f2, "->", f3, f3.str("E"))
print("")
return True
def test3():
# Subtraction.
print("test3 - Subtraction")
f1 = Float()
f2 = Float()
f1.load("2000.05")
f2.load("0.001")
f3 = Float.subtract(f1, f2)
print(PassFail(f3.str() == "2000.049"), f1, "-", f2, "->", f3, f3.str("E"))
f1.load("0.1")
f2.load("0.2")
f3 = Float.subtract(f1, f2)
print(PassFail(f3.str() == "-0.1"), f1, "-", f2, "->", f3, f3.str("E"))
f1.load("10")
f2.load("0.6667")
f3 = Float.subtract(f1, f2)
print(PassFail(f3.str() == "9.3333"), f1, "-", f2, "->", f3, f3.str("E"))
f1.load("500")
f2.load("600")
f3 = Float.subtract(f1, f2)
print(PassFail(f3.str() == "-100"), f1, "-", f2, "->", f3, f3.str("E"))
f1.load("500")
f2.load("-600")
f3 = Float.subtract(f1, f2)
print(PassFail(f3.str() == "1100"), f1, "-", f2, "->", f3, f3.str("E"))
f1.load("-500")
f2.load("600")
f3 = Float.subtract(f1, f2)
print(PassFail(f3.str() == "-1100"), f1, "-", f2, "->", f3, f3.str("E"))
print("")
return True
def test4():
# Multiplication.
print("test4 - Multiplication")
f1 = Float()
f2 = Float()
f1.load("5")
f2.load("6")
f3 = Float.multiply(f1, f2)
print(PassFail(f3.str() == "30"), f1, "*", f2, "->", f3, f3.str("E"))
f1.load("500")
f2.load("600")
f3 = Float.multiply(f1, f2)
print(PassFail(f3.str() == "300000"), f1, "*", f2, "->", f3, f3.str("E"))
f1.load("5e3")
f2.load("6e3")
f3 = Float.multiply(f1, f2)
print(PassFail(f3.str() == "30000000"), f1, "*", f2, "->", f3, f3.str("E"))
f1.load("5e6")
f2.load("6e6")
f3 = Float.multiply(f1, f2)
print(PassFail(f3.str() == "30000000000000"), f1, "*", f2, "->", f3, f3.str("E"))
print("")
return True
def test5():
# Division.
print("test5 - Division")
f1 = Float()
f2 = Float()
f1.load("1")
f2.load("3")
f3 = Float.divide(f1, f2)
print(PassFail(f3.str()[:7] == "0.33333"), f1, "/", f2, "->", f3, f3.str("E"), f3.debug())
f1.load("5")
f2.load("6")
f3 = Float.divide(f1, f2)
print(PassFail(f3.str()[:7] == "0.83333"), f1, "/", f2, "->", f3, f3.str("E"), f3.debug())
f1.load("500")
f2.load("600")
f3 = Float.divide(f1, f2)
print(PassFail(f3.str()[:7] == "0.83333"), f1, "/", f2, "->", f3, f3.str("E"), f3.debug())
f1.load("5e3")
f2.load("6e3")
f3 = Float.divide(f1, f2)
print(PassFail(f3.str()[:7] == "0.83333"), f1, "/", f2, "->", f3, f3.str("E"), f3.debug())
f1.load("5e6")
f2.load("6e6")
f3 = Float.divide(f1, f2)
print(PassFail(f3.str()[:7] == "0.83333"), f1, "/", f2, "->", f3, f3.str("E"), f3.debug())
print("")
return True
def test6():
# Object creation options.
print("test6 - Object creation")
f1 = Float()
print(PassFail(f1.str() == "0"), f1, f1.debug())
f1 = Float(123)
print(PassFail(f1.str() == "123"), f1, f1.debug())
f1 = Float("3.1416")
print(PassFail(f1.str() == "3.1416"), f1, f1.debug())
f2 = Float(f1)
print(PassFail(f1.str() == "3.1416"), f2, f2.debug())
print("")
return True
def test7():
# Equality / Inequality operator overloads.
print("test7 - Equality / Inequality operator overloads")
f1 = Float(123)
f2 = Float("123")
f3 = Float("123.0001")
print(PassFail(f1 == f2), "(", f1, "==", f2, ") is", f1 == f2)
print(PassFail(f1 != f3), "(", f1, "==", f3, ") is", f1 == f3)
print(PassFail(f1 == f2), "(", f1, "!=", f2, ") is", f1 != f2)
print(PassFail(f1 != f3), "(", f1, "!=", f3, ") is", f1 != f3)
print("")
return True
def test8():
# test8 - Arithmetic operator overloads.
print("test8 - Arithmetic operator overloads")
f1 = Float("1.8")
f2 = Float("3.7")
f3 = f1 + f2
print(PassFail(f3.str() == "5.5"), f1, "+", f2, "->", f3, f3.str("E"))
f3 = f1 - f2
print(PassFail(f3.str() == "-1.9"), f1, "-", f2, "->", f3, f3.str("E"))
f3 = f1 * f2
print(PassFail(f3.str() == "6.66"), f1, "*", f2, "->", f3, f3.str("E"))
f3 = f1 / f2
print(PassFail(f3.str()[:8] == "0.486486"), f1, "/", f2, "->", f3, f3.str("E"))
return True
def PassFail(cond):
return ("PASS" if cond else "FAIL") + ": "
test1()
test2()
test3()
test4()
test5()
test6()
test7()
test8()