Skip to content

Commit 00cf514

Browse files
committed
Use pfmt for stricter deep comparison in assertions
1 parent 89a033c commit 00cf514

File tree

2 files changed

+39
-25
lines changed

2 files changed

+39
-25
lines changed

test/test_cli.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
from apycalc import load_data, save_data, get_entry_1yago, compute_stats
1111

12+
from util import pfmt
13+
1214

1315
def test_load_data() -> None:
1416
csv = textwrap.dedent('''\
@@ -20,19 +22,19 @@ def test_load_data() -> None:
2022

2123
data = list(load_data(io.StringIO(csv)))
2224

23-
assert data == [
24-
{'date': date(2000, 1, 1), 'rate': 10},
25-
{'date': date(2000, 1, 8), 'rate': 12},
26-
{'date': date(2000, 1, 15), 'rate': 13},
27-
]
25+
assert pfmt(data) == pfmt([
26+
{'date': date(2000, 1, 1), 'rate': 10.0},
27+
{'date': date(2000, 1, 8), 'rate': 12.0},
28+
{'date': date(2000, 1, 15), 'rate': 13.0},
29+
])
2830

2931
data = list(load_data(io.StringIO(csv), krate='Close'))
3032

31-
assert data == [
32-
{'date': date(2000, 1, 1), 'rate': 12},
33-
{'date': date(2000, 1, 8), 'rate': 13},
33+
assert pfmt(data) == pfmt([
34+
{'date': date(2000, 1, 1), 'rate': 12.0},
35+
{'date': date(2000, 1, 8), 'rate': 13.0},
3436
{'date': date(2000, 1, 15), 'rate': 18.5},
35-
]
37+
])
3638

3739
csv = textwrap.dedent('''\
3840
Date,Open
@@ -43,19 +45,19 @@ def test_load_data() -> None:
4345

4446
data = list(load_data(io.StringIO(csv)))
4547

46-
assert data == [
47-
{'date': date(2000, 1, 1), 'rate': 10},
48-
{'date': date(2000, 1, 8), 'rate': 0},
49-
{'date': date(2000, 1, 15), 'rate': 13},
50-
]
48+
assert pfmt(data) == pfmt([
49+
{'date': date(2000, 1, 1), 'rate': 10.0},
50+
{'date': date(2000, 1, 8), 'rate': 0.0},
51+
{'date': date(2000, 1, 15), 'rate': 13.0},
52+
])
5153

5254
data = list(load_data(io.StringIO(csv), fill_zeros=True))
5355

54-
assert data == [
55-
{'date': date(2000, 1, 1), 'rate': 10},
56-
{'date': date(2000, 1, 8), 'rate': 10},
57-
{'date': date(2000, 1, 15), 'rate': 13},
58-
]
56+
assert pfmt(data) == pfmt([
57+
{'date': date(2000, 1, 1), 'rate': 10.0},
58+
{'date': date(2000, 1, 8), 'rate': 10.0},
59+
{'date': date(2000, 1, 15), 'rate': 13.0},
60+
])
5961

6062

6163
def test_save_data() -> None:
@@ -142,8 +144,8 @@ def test_compute_stats() -> None:
142144

143145
data_in_copy = [x.copy() for x in data_in]
144146
data_out = list(compute_stats(data_in))
145-
assert data_in == data_in_copy
146-
assert data_out == [
147+
assert pfmt(data_in) == pfmt(data_in_copy)
148+
assert pfmt(data_out) == pfmt([
147149
{'date': date(2002, 1, 1), 'rate': 201,
148150
'apy': 0.9900990099009901, 'apyma': 0.9900990099009901},
149151
{'date': date(2002, 4, 4), 'rate': 204,
@@ -152,12 +154,12 @@ def test_compute_stats() -> None:
152154
'apy': 0.9714285714285715, 'apyma': 0.9937765205091939},
153155
{'date': date(2002, 10, 10), 'rate': 210,
154156
'apy': 0.926605504587156, 'apyma': 0.9769837665286843},
155-
]
157+
])
156158

157159
data_in_copy = [x.copy() for x in data_in]
158160
data_out = list(compute_stats(data_in, 2))
159-
assert data_in == data_in_copy
160-
assert data_out == [
161+
assert pfmt(data_in) == pfmt(data_in_copy)
162+
assert pfmt(data_out) == pfmt([
161163
{'date': date(2002, 1, 1), 'rate': 201,
162164
'apy': 0.9900990099009901, 'apyma': 0.9900990099009901},
163165
{'date': date(2002, 4, 4), 'rate': 204,
@@ -166,4 +168,4 @@ def test_compute_stats() -> None:
166168
'apy': 0.9714285714285715, 'apyma': 0.9956152758132957},
167169
{'date': date(2002, 10, 10), 'rate': 210,
168170
'apy': 0.926605504587156, 'apyma': 0.9490170380078637},
169-
]
171+
])

test/util.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env python3
2+
3+
from pprint import pformat
4+
5+
6+
# Src: https://github.com/dmotte/misc/tree/main/snippets
7+
def pfmt(x: object) -> str:
8+
'''
9+
Like pprint.pformat but preserves the order of dict keys.
10+
Useful for strict deep comparison of objects
11+
'''
12+
return pformat(x, sort_dicts=False)

0 commit comments

Comments
 (0)