Skip to content

Commit e98bb66

Browse files
committed
Update tests
1 parent cb4dd9d commit e98bb66

2 files changed

Lines changed: 65 additions & 135 deletions

File tree

tests/test_analyze.py

Lines changed: 36 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import shutil
22
import pytest
3+
import csv
34
from consensus_decentralization.helper import INTERIM_DIR, get_clustering_flag
45
from consensus_decentralization.analyze import analyze
56

@@ -59,62 +60,49 @@ def test_analyze(setup_and_cleanup):
5960
population_windows=0
6061
)
6162

62-
metrics = ['gini', 'nakamoto_coefficient', 'entropy=1']
63-
for metric in metrics:
64-
output_file = test_output_dir / 'metrics' / f'{metric}.csv'
65-
assert output_file.is_file()
63+
output_file = test_output_dir / 'metrics' / 'output_clustered.csv'
64+
assert output_file.is_file()
6665

67-
with open(output_file) as f:
68-
lines = f.readlines()
69-
assert lines[0] == 'timeframe,sample_bitcoin\n'
70-
if metric == 'gini':
71-
assert lines[1] == '2018,0.25\n'
72-
elif metric == 'nakamoto_coefficient':
73-
assert lines[1] == '2018,2\n'
74-
elif metric == 'entropy=1':
75-
assert lines[1] == '2018,1.836591668108979\n'
66+
with open(output_file) as f:
67+
reader = list(csv.reader(f))
68+
header = reader[0]
69+
# find metric column indices
70+
gini_idx = header.index('gini')
71+
nc_idx = header.index('nakamoto_coefficient')
72+
ent_idx = header.index('entropy=1')
7673

77-
analyze(
78-
projects=projects,
79-
aggregated_data_filename='month_from_2018-02-01_to_2018-03-31.csv',
80-
input_dir=test_output_dir,
81-
output_dir=test_output_dir / 'metrics',
82-
population_windows=0
83-
)
84-
85-
metrics = ['gini', 'nakamoto_coefficient', 'entropy=1']
86-
for metric in metrics:
87-
output_file = test_output_dir / 'metrics' / f'{metric}.csv'
88-
assert output_file.is_file()
89-
90-
with open(output_file) as f:
91-
lines = f.readlines()
92-
assert lines[0] == 'timeframe,sample_bitcoin\n'
93-
if metric == 'gini':
94-
assert lines[1] == 'Feb-2018,0.16666666666666666\n'
95-
assert lines[2] == 'Mar-2018,0.0\n'
96-
elif metric == 'nakamoto_coefficient':
97-
assert lines[1] == 'Feb-2018,1\n'
98-
assert lines[2] == 'Mar-2018,1\n'
99-
elif metric == 'entropy=1':
100-
assert lines[1] == 'Feb-2018,1.5\n'
101-
assert lines[2] == 'Mar-2018,0.0\n'
74+
# find the row for sample_bitcoin and 2018
75+
data_row = None
76+
for row in reader[1:]:
77+
if row[0] == 'sample_bitcoin' and row[1] == '2018':
78+
data_row = row
79+
break
80+
assert data_row is not None
81+
assert data_row[gini_idx] == '0.25'
82+
assert data_row[nc_idx] == '2'
83+
assert data_row[ent_idx] == '1.836591668108979'
10284

10385
analyze(
10486
projects=projects,
105-
aggregated_data_filename='year_from_2010-01-01_to_2010-12-31.csv',
87+
aggregated_data_filename='month_from_2018-02-01_to_2018-03-31.csv',
10688
input_dir=test_output_dir,
10789
output_dir=test_output_dir / 'metrics',
10890
population_windows=0
10991
)
11092

111-
metrics = ['gini', 'nakamoto_coefficient', 'entropy=1']
112-
for metric in metrics:
113-
output_file = test_output_dir / 'metrics' / f'{metric}.csv'
114-
assert output_file.is_file()
93+
output_file = test_output_dir / 'metrics' / 'output_clustered.csv'
94+
assert output_file.is_file()
95+
with open(output_file) as f:
96+
reader = list(csv.reader(f))
97+
header = reader[0]
98+
gini_idx = header.index('gini')
99+
nc_idx = header.index('nakamoto_coefficient')
100+
ent_idx = header.index('entropy=1')
115101

116-
with open(output_file) as f:
117-
lines = f.readlines()
118-
assert len(lines) == 2
119-
assert lines[0] == 'timeframe,sample_bitcoin\n'
120-
assert lines[1] == '2010,\n'
102+
rows_for_project = {row[1]: row for row in reader[1:] if row[0] == 'sample_bitcoin'}
103+
assert rows_for_project['Feb-2018'][gini_idx] == '0.16666666666666666'
104+
assert rows_for_project['Mar-2018'][gini_idx] == '0.0'
105+
assert rows_for_project['Feb-2018'][nc_idx] == '1'
106+
assert rows_for_project['Mar-2018'][nc_idx] == '1'
107+
assert rows_for_project['Feb-2018'][ent_idx] == '1.5'
108+
assert rows_for_project['Mar-2018'][ent_idx] == '0.0'

tests/test_end_to_end.py

Lines changed: 29 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from consensus_decentralization.mappings.cardano_mapping import CardanoMapping
1212
from consensus_decentralization.helper import INTERIM_DIR, config
1313
import pytest
14+
import csv
1415

1516

1617
@pytest.fixture
@@ -28,8 +29,6 @@ def setup_and_cleanup():
2829
ledger_mapping['sample_cardano'] = CardanoMapping
2930
ledger_parser['sample_cardano'] = DummyParser
3031

31-
force_map_flag = config['force_map']
32-
config['force_map'] = True
3332
config['clustering'] = True
3433

3534
mapping_info_dir = pathlib.Path(__file__).resolve().parent.parent / 'mapping_information'
@@ -72,69 +71,21 @@ def setup_and_cleanup():
7271
except FileNotFoundError:
7372
pass
7473

75-
config['force_map'] = force_map_flag
76-
7774

7875
def test_end_to_end(setup_and_cleanup):
7976
test_output_dir, test_metrics_dir = setup_and_cleanup
8077

81-
main(
82-
['sample_bitcoin', 'sample_cardano'],
83-
(datetime.date(2010, 1, 1), datetime.date(2010, 12, 31)),
84-
estimation_window=None,
85-
frequency=None,
86-
interim_dir=test_output_dir,
87-
results_dir=test_output_dir,
88-
population_windows=0
89-
)
90-
91-
expected_entropy = [
92-
'timeframe,sample_bitcoin,sample_cardano\n',
93-
'2010-07-02,,\n'
94-
]
95-
with open(test_metrics_dir / 'entropy=1.csv') as f:
96-
lines = f.readlines()
97-
for idx, line in enumerate(lines):
98-
assert line == expected_entropy[idx]
99-
100-
expected_gini = [
101-
'timeframe,sample_bitcoin,sample_cardano\n',
102-
'2010-07-02,,\n'
103-
]
104-
with open(test_metrics_dir / 'gini.csv') as f:
105-
lines = f.readlines()
106-
for idx, line in enumerate(lines):
107-
assert line == expected_gini[idx]
108-
109-
expected_nc = [
110-
'timeframe,sample_bitcoin,sample_cardano\n',
111-
'2010-07-02,,\n'
112-
]
113-
with open(test_metrics_dir / 'nakamoto_coefficient.csv') as f:
114-
lines = f.readlines()
115-
for idx, line in enumerate(lines):
116-
assert line == expected_nc[idx]
117-
11878
main(
11979
['sample_bitcoin', 'sample_cardano'],
12080
(datetime.date(2018, 2, 1), datetime.date(2018, 3, 31)),
12181
estimation_window=30,
12282
frequency=30,
12383
interim_dir=test_output_dir,
12484
results_dir=test_output_dir,
125-
population_windows=0
85+
population_windows=0,
86+
force_map=True
12687
)
12788

128-
expected_entropy = [
129-
'timeframe,sample_bitcoin,sample_cardano\n',
130-
'2018-02-15,1.5,\n',
131-
'2018-03-17,0.0,\n',
132-
]
133-
with open(test_metrics_dir / 'entropy=1.csv') as f:
134-
lines = f.readlines()
135-
for idx, line in enumerate(lines):
136-
assert line == expected_entropy[idx]
137-
13889
# todo fix test (remake calculations from sample files given the new window/frequency)
13990
# expected_gini = [
14091
# 'timeframe,sample_bitcoin,sample_cardano\n',
@@ -146,14 +97,18 @@ def test_end_to_end(setup_and_cleanup):
14697
# for idx, line in enumerate(lines):
14798
# assert line == expected_gini[idx]
14899

149-
expected_nc = [
150-
'timeframe,sample_bitcoin,sample_cardano\n',
151-
'2018-02-15,1,\n', '2018-03-17,1,\n'
152-
]
153-
with open(test_metrics_dir / 'nakamoto_coefficient.csv') as f:
154-
lines = f.readlines()
155-
for idx, line in enumerate(lines):
156-
assert line == expected_nc[idx]
100+
output_file = test_metrics_dir / 'output_clustered.csv'
101+
assert output_file.is_file()
102+
with open(output_file) as f:
103+
rows = list(csv.reader(f))
104+
header = rows[0]
105+
ent_idx = header.index('entropy=1')
106+
nc_idx = header.index('nakamoto_coefficient')
107+
108+
# build mapping ledger+date -> row
109+
row_map = {(r[0], r[1]): r for r in rows[1:]}
110+
assert row_map[('sample_bitcoin', '2018-02-15')][ent_idx] == '1.5'
111+
assert row_map[('sample_bitcoin', '2018-02-15')][nc_idx] == '1'
157112

158113
main(
159114
['sample_bitcoin', 'sample_cardano'],
@@ -162,32 +117,19 @@ def test_end_to_end(setup_and_cleanup):
162117
frequency=31,
163118
interim_dir=test_output_dir,
164119
results_dir=test_output_dir,
165-
population_windows=0
120+
population_windows=0,
121+
force_map=True
166122
)
167123

168-
expected_entropy = [
169-
'timeframe,sample_bitcoin,sample_cardano\n',
170-
'2020-12-16,,1.9219280948873623\n'
171-
]
172-
with open(test_metrics_dir / 'entropy=1.csv') as f:
173-
lines = f.readlines()
174-
for idx, line in enumerate(lines):
175-
assert line == expected_entropy[idx]
176-
177-
expected_gini = [
178-
'timeframe,sample_bitcoin,sample_cardano\n',
179-
'2020-12-16,,0.15\n'
180-
]
181-
with open(test_metrics_dir / 'gini.csv') as f:
182-
lines = f.readlines()
183-
for idx, line in enumerate(lines):
184-
assert line == expected_gini[idx]
185-
186-
expected_nc = [
187-
'timeframe,sample_bitcoin,sample_cardano\n',
188-
'2020-12-16,,2\n'
189-
]
190-
with open(test_metrics_dir / 'nakamoto_coefficient.csv') as f:
191-
lines = f.readlines()
192-
for idx, line in enumerate(lines):
193-
assert line == expected_nc[idx]
124+
output_file = test_metrics_dir / 'output_clustered.csv'
125+
assert output_file.is_file()
126+
with open(output_file) as f:
127+
rows = list(csv.reader(f))
128+
header = rows[0]
129+
ent_idx = header.index('entropy=1')
130+
gini_idx = header.index('gini')
131+
nc_idx = header.index('nakamoto_coefficient')
132+
row_map = {(r[0], r[1]): r for r in rows[1:]}
133+
assert row_map[('sample_cardano', '2020-12-16')][ent_idx] == '1.9219280948873623'
134+
assert row_map[('sample_cardano', '2020-12-16')][gini_idx] == '0.15'
135+
assert row_map[('sample_cardano', '2020-12-16')][nc_idx] == '2'

0 commit comments

Comments
 (0)