2018-12-04 08:54:29 +00:00
|
|
|
from unittest import TestCase
|
|
|
|
import os
|
|
|
|
from os.path import join
|
|
|
|
|
|
|
|
from soil import utils, simulation
|
|
|
|
|
|
|
|
ROOT = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
EXAMPLES = join(ROOT, '..', 'examples')
|
|
|
|
|
|
|
|
|
|
|
|
class TestExamples(TestCase):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def make_example_test(path, config):
|
|
|
|
def wrapped(self):
|
|
|
|
root = os.getcwd()
|
|
|
|
os.chdir(os.path.dirname(path))
|
|
|
|
s = simulation.from_config(config)
|
2018-12-08 19:49:34 +00:00
|
|
|
iterations = s.max_time * s.num_trials
|
|
|
|
if iterations > 1000:
|
|
|
|
self.skipTest('This example would probably take too long')
|
2018-12-04 08:54:29 +00:00
|
|
|
envs = s.run_simulation(dry_run=True)
|
|
|
|
assert envs
|
|
|
|
for env in envs:
|
|
|
|
assert env
|
|
|
|
try:
|
|
|
|
n = config['network_params']['n']
|
|
|
|
assert len(list(env.network_agents)) == n
|
|
|
|
assert env.now > 2 # It has run
|
|
|
|
assert env.now <= config['max_time'] # But not further than allowed
|
|
|
|
except KeyError:
|
|
|
|
pass
|
|
|
|
os.chdir(root)
|
|
|
|
return wrapped
|
|
|
|
|
|
|
|
|
|
|
|
def add_example_tests():
|
|
|
|
for config, path in utils.load_config(join(EXAMPLES, '**', '*.yml')):
|
|
|
|
p = make_example_test(path=path, config=config)
|
|
|
|
fname = os.path.basename(path)
|
|
|
|
p.__name__ = 'test_example_file_%s' % fname
|
|
|
|
p.__doc__ = '%s should be a valid configuration' % fname
|
|
|
|
setattr(TestExamples, p.__name__, p)
|
|
|
|
del p
|
|
|
|
|
|
|
|
|
|
|
|
add_example_tests()
|