forked from furnace-dev/furnace
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_precise.mojo
117 lines (90 loc) · 3.02 KB
/
test_precise.mojo
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from testing import assert_equal, assert_true, assert_raises
from ccxt.base.precise import Precise
fn test_initialization() raises:
var p1 = Precise("123.456")
assert_equal(p1.integer, 123456)
assert_equal(p1.decimals, 3)
var p2 = Precise(123, 2)
assert_equal(p2.integer, 123)
assert_equal(p2.decimals, 2)
fn test_addition() raises:
var p1 = Precise("1.1")
var p2 = Precise("2.2")
var result = p1 + p2
assert_equal(str(result), "3.3")
fn test_subtraction() raises:
var p1 = Precise("5.5")
var p2 = Precise("2.2")
var result = p1 - p2
assert_equal(str(result), "3.3")
fn test_multiplication() raises:
var p1 = Precise("2.5")
var p2 = Precise("4.0")
var result = p1 * p2
assert_equal(str(result), "10")
fn test_division() raises:
var p1 = Precise("10.0")
var p2 = Precise("2.0")
var result = p1 / p2
assert_equal(str(p1), "10")
assert_equal(str(p2), "2")
assert_equal(str(result), "5")
# 测试除后有小数
var p3 = Precise("10.0")
var p4 = Precise("3.0")
assert_equal(str(p3 / p4), "3.3333333333")
# 测试两个小数相除
var p5 = Precise("1.2")
var p6 = Precise("3.6")
assert_equal(str(p5 / p6), "0.3333333333")
fn test_modulus() raises:
var p1 = Precise("5.5")
var p2 = Precise("2.0")
var result = p1 % p2
assert_equal(str(result), "1.5")
fn test_negation() raises:
var p1 = Precise("3.5")
var result = -p1
assert_equal(str(result), "-3.5")
fn test_absolute() raises:
var p1 = Precise("-3.5")
var result = abs(p1)
assert_equal(str(result), "3.5")
fn test_comparisons() raises:
var p1 = Precise("1.0")
var p2 = Precise("2.0")
assert_true(p1 < p2)
assert_true(p2 > p1)
assert_true(p1 <= p1)
assert_true(p1 >= p1)
assert_true(p1 != p2)
fn test_string_operations() raises:
assert_true(Precise.string_add("1.1", "2.2") == Precise("3.3"))
assert_true(Precise.string_sub("5.5", "2.2") == Precise("3.3"))
assert_true(Precise.string_mul("2.5", "4.0") == Precise("10.0"))
assert_true(Precise.string_div("10.0", "20.0") == Precise("0.5"))
var p1 = Precise("10")
assert_equal(p1.integer, 10)
assert_equal(p1.decimals, 0)
assert_equal(p1.base, 10)
var p2 = Precise("2")
assert_equal(p2.integer, 2)
assert_equal(p2.decimals, 0)
assert_equal(p2.base, 10)
var result = Precise.string_div("10.0", "2.0")
assert_equal(str(result), "5")
fn test_edge_cases() raises:
var p1 = Precise("0.0")
var p2 = Precise("0.0")
assert_equal(str(p1 + p2), "0")
assert_equal(str(p1 - p2), "0")
assert_equal(str(p1 * p2), "0")
# with assert_raises(contains="division by zero"):
# _ = Precise.string_div("10.0", "0.0")
var result = Precise.string_div("10.0", "0.0")
assert_equal(str(result), "0")
# assert_equal(str(p1 / p2), None) # Division by zero should return
fn test_precise_string_conversion() raises:
var p1 = Precise("1")
var p2 = Precise(1)
assert_equal(str(p1), str(p2))