Compare commits

...

4 Commits

Author SHA1 Message Date
J. Fernando Sánchez 1cf85ea450 Avoid writing gexf in test 5 years ago
J. Fernando Sánchez c32e167fb8 Bump pyyaml to 5.1 5 years ago
J. Fernando Sánchez 5f68b5321d Pinning scipy to 1.2.1
1.3.0rc1 is not compatible with salib
5 years ago
J. Fernando Sánchez 2a2843bd19 Add tests exporters 5 years ago

@ -1,4 +1,7 @@
test:
quick-test:
docker-compose exec dev python -m pytest -s -v
.PHONY: test
test:
docker run -t -v $$PWD:/usr/src/app -w /usr/src/app python:3.7 python setup.py test
.PHONY: test

@ -3,8 +3,8 @@ simpy
networkx>=2.0
numpy
matplotlib
pyyaml
pyyaml>=5.1
pandas>=0.23
scipy>=1.2
scipy==1.2.1 # scipy 1.3.0rc1 is not compatible with salib
SALib>=1.3
Jinja2

@ -21,6 +21,7 @@ def for_sim(simulation, names, *args, **kwargs):
exporters.append(mod(simulation, *args, **kwargs))
return exporters
class DryRunner(BytesIO):
def __init__(self, fname, *args, copy_to=None, **kwargs):
super().__init__(*args, **kwargs)

@ -55,7 +55,7 @@ def load_file(infile):
def load_string(string):
yield from yaml.load_all(string)
yield from yaml.load_all(string, Loader=yaml.FullLoader)
def expand_template(config):

@ -0,0 +1,110 @@
import os
import io
import tempfile
import shutil
from time import time
from unittest import TestCase
from soil import exporters
from soil.utils import safe_open
from soil import simulation
class Dummy(exporters.Exporter):
started = False
trials = 0
ended = False
total_time = 0
def start(self):
self.__class__.started = True
def trial_end(self, env):
assert env
self.__class__.trials += 1
self.__class__.total_time += env.now
def end(self):
self.__class__.ended = True
class Exporters(TestCase):
def test_basic(self):
config = {
'name': 'exporter_sim',
'network_params': {},
'agent_type': 'CounterModel',
'max_time': 2,
'num_trials': 5,
'environment_params': {}
}
s = simulation.from_config(config)
s.run_simulation(exporters=[Dummy], dry_run=True)
assert Dummy.started
assert Dummy.ended
assert Dummy.trials == 5
assert Dummy.total_time == 2*5
def test_distribution(self):
'''The distribution exporter should write the number of agents in each state'''
config = {
'name': 'exporter_sim',
'network_params': {
'generator': 'complete_graph',
'n': 4
},
'agent_type': 'CounterModel',
'max_time': 2,
'num_trials': 5,
'environment_params': {}
}
output = io.StringIO()
s = simulation.from_config(config)
s.run_simulation(exporters=[exporters.Distribution], dry_run=True, exporter_params={'copy_to': output})
result = output.getvalue()
assert 'count' in result
assert 'SEED,Noneexporter_sim_trial_3,1,,1,1,1,1' in result
def test_writing(self):
'''Try to write CSV, GEXF, sqlite and YAML (without dry_run)'''
n_trials = 5
config = {
'name': 'exporter_sim',
'network_params': {
'generator': 'complete_graph',
'n': 4
},
'agent_type': 'CounterModel',
'max_time': 2,
'num_trials': n_trials,
'environment_params': {}
}
output = io.StringIO()
s = simulation.from_config(config)
tmpdir = tempfile.mkdtemp()
envs = s.run_simulation(exporters=[
exporters.Default,
exporters.CSV,
exporters.Gexf,
exporters.Distribution,
],
outdir=tmpdir,
exporter_params={'copy_to': output})
result = output.getvalue()
simdir = os.path.join(tmpdir, s.group or '', s.name)
with open(os.path.join(simdir, '{}.dumped.yml'.format(s.name))) as f:
result = f.read()
assert result
try:
for e in envs:
with open(os.path.join(simdir, '{}.gexf'.format(e.name))) as f:
result = f.read()
assert result
with open(os.path.join(simdir, '{}.csv'.format(e.name))) as f:
result = f.read()
assert result
finally:
shutil.rmtree(tmpdir)

@ -1,6 +1,7 @@
from unittest import TestCase
import os
import io
import yaml
import pickle
import networkx as nx
@ -217,7 +218,8 @@ class TestMain(TestCase):
"""
G = nx.random_geometric_graph(20, 0.1)
env = Environment(topology=G)
env.dump_gexf('/tmp/dump-gexf/prueba.gexf')
f = io.BytesIO()
env.dump_gexf(f)
def test_save_graph(self):
'''

Loading…
Cancel
Save