mirror of
https://github.com/vale981/SecondaryValue
synced 2025-03-04 16:41:38 -05:00
Add Tests
This commit is contained in:
parent
2d88701eaa
commit
a2cc857f24
6 changed files with 110 additions and 2 deletions
11
.travis.yml
Normal file
11
.travis.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
language: python
|
||||||
|
python:
|
||||||
|
- "3"
|
||||||
|
|
||||||
|
install:
|
||||||
|
- pip install tox-travis coveralls
|
||||||
|
script:
|
||||||
|
- tox
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- coveralls
|
81
SecondaryValue/test_secondaryvalue.py
Normal file
81
SecondaryValue/test_secondaryvalue.py
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
from SecondaryValue import SecondaryValue
|
||||||
|
import random
|
||||||
|
from pytest import approx, raises
|
||||||
|
import numpy
|
||||||
|
|
||||||
|
class TestBasicUsage():
|
||||||
|
def setup(self):
|
||||||
|
self.x = SecondaryValue('a*b+c')
|
||||||
|
|
||||||
|
def test_no_uncertainties(self):
|
||||||
|
# no uncertainties
|
||||||
|
assert 1.2 * 7.9 + 10 == self.x(a=1.2, b=7.9, c=10)
|
||||||
|
|
||||||
|
def test_get_symbols(self):
|
||||||
|
# the right symbols
|
||||||
|
assert self.x.get_symbols() == {'a': {}, 'b': {}, 'c': {}}
|
||||||
|
|
||||||
|
def ret_deps_without_deps(self):
|
||||||
|
# retdeps returns a dict
|
||||||
|
assert self.x(a=1, b=1, c=1, retdeps=True)[1] == {}
|
||||||
|
|
||||||
|
def test_uncertainties(self):
|
||||||
|
# dirty
|
||||||
|
for i in range(100):
|
||||||
|
a, b, c = [(random.random(), random.random()) for _ in range(3)]
|
||||||
|
assert (a[0]*b[0] + c[0], numpy.sqrt((a[0]*b[1])**2 + (a[1]*b[0])**2 + c[1]**2)) \
|
||||||
|
== approx(self.x(a=a, b=b, c=c))
|
||||||
|
|
||||||
|
def test_error_missing(self):
|
||||||
|
with raises(RuntimeError):
|
||||||
|
self.x(u=1)
|
||||||
|
|
||||||
|
class TestDependecies():
|
||||||
|
def setup(self):
|
||||||
|
self.x = SecondaryValue('b')
|
||||||
|
self.y = SecondaryValue('a + x', dependencies=dict(x=self.x))
|
||||||
|
|
||||||
|
def test_overwrite(self):
|
||||||
|
result, deps = self.y(a=1, x=1, retdeps=True)
|
||||||
|
assert deps == {}
|
||||||
|
assert result == 2
|
||||||
|
|
||||||
|
def test_dep_calc(self):
|
||||||
|
result, deps = self.y(a=1, b=2, retdeps=True)
|
||||||
|
|
||||||
|
assert result == 3
|
||||||
|
assert deps == {'x': (2, {})}
|
||||||
|
|
||||||
|
def test_dep_calc_err(self):
|
||||||
|
# no retdep
|
||||||
|
for i in range(100):
|
||||||
|
a, b = [(random.random(), random.random()) for _ in range(2)]
|
||||||
|
result, deps = self.y(a=a, b=b, retdeps=True)
|
||||||
|
|
||||||
|
assert (a[0]+b[0], numpy.sqrt((b[1])**2 + (a[1])**2)) \
|
||||||
|
== approx(result)
|
||||||
|
|
||||||
|
assert (b[0], numpy.abs(b[1])) == approx(deps['x'][0])
|
||||||
|
|
||||||
|
|
||||||
|
class TestDefaults():
|
||||||
|
def setup(self):
|
||||||
|
self.y = SecondaryValue('a + b', defaults=dict(a=(1, 2)))
|
||||||
|
|
||||||
|
def test_basics(self):
|
||||||
|
assert (2, 2) == self.y(b=1)
|
||||||
|
|
||||||
|
class TestShapes():
|
||||||
|
def setup(self):
|
||||||
|
self.x = SecondaryValue('b')
|
||||||
|
self.y = SecondaryValue('a + x', dependencies=dict(x=self.x))
|
||||||
|
|
||||||
|
def test_array_central_value(self):
|
||||||
|
# mixed
|
||||||
|
assert numpy.any(numpy.array([1,2,3]) == self.y(a=([1,2,3],), b=0))
|
||||||
|
|
||||||
|
# both
|
||||||
|
assert numpy.any(2*numpy.array([1,2,3]) \
|
||||||
|
== self.y(a=([1,2,3],), b=([1,2,3],)))
|
||||||
|
|
||||||
|
# def test_array_uncert(self):
|
2
setup.cfg
Normal file
2
setup.cfg
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[tool:pytest]
|
||||||
|
addopts = -v -x --ignore=setup.py --ignore=./SecondaryValue/__init__.py --cov=SecondaryValue
|
6
setup.py
6
setup.py
|
@ -1,8 +1,10 @@
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
|
||||||
|
# read the contents of your README file
|
||||||
|
from os import path
|
||||||
|
this_directory = path.abspath(path.dirname(__file__))
|
||||||
def readme():
|
def readme():
|
||||||
with open('Readme.md') as f:
|
with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
|
||||||
return f.read()
|
return f.read()
|
||||||
|
|
||||||
setup(name='SecondaryValue',
|
setup(name='SecondaryValue',
|
||||||
|
|
12
tox.ini
Normal file
12
tox.ini
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
[tox]
|
||||||
|
envlist = py3
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
commands = pytest
|
||||||
|
deps =
|
||||||
|
pytest-pep8
|
||||||
|
pytest-cov
|
||||||
|
pytest
|
||||||
|
coverage
|
||||||
|
numpy
|
||||||
|
sympy
|
Loading…
Add table
Reference in a new issue