diff --git a/.gitignore b/.gitignore index 0205e3c..d86b5b3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ build/* *.o test_priv test_priv/* -**/__pycache__ \ No newline at end of file +**/__pycache__ +coverage.xml +.coverage +htmlcov diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b6448d6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Debug tests", + "type": "python", + "request": "launch", + "program": "nose2 -v", + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/repgen/data/value.py b/repgen/data/value.py index eebf844..3004f20 100644 --- a/repgen/data/value.py +++ b/repgen/data/value.py @@ -1,8 +1,10 @@ import pytz,datetime,sys -from inspect import isfunction +from inspect import isclass, isfunction +import operator # types string_types = ("".__class__,u"".__class__) number_types = (int,float,complex) +array_type = ([].__class__,().__class__) class Value: shared = { @@ -67,6 +69,9 @@ def __init__( self, *args, **kwargs ): elif self.dbtype.upper() == "GENTS": current_t = self.start end_t = self.end + if isinstance(self.value, array_type): + self.values = self.value + return while current_t <= end_t: if isinstance(self.value, number_types): self.values.append( ( current_t.astimezone(self.tz),self.value,0 ) ) @@ -74,7 +79,7 @@ def __init__( self, *args, **kwargs ): self.value = self.value.value self.values.append( ( current_t.astimezone(self.tz),self.value,0 ) ) elif isfunction(self.value): - self.values.append( ( current_t.astimezone(self.tz),self.value(),0 ) ) + self.values.append( ( current_t.astimezone(self.tz),self.value(),0 ) ) current_t = current_t + self.interval diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..555c541 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +from . dataset import Dataset,Result \ No newline at end of file diff --git a/tests/dataset.py b/tests/dataset.py new file mode 100644 index 0000000..03bf812 --- /dev/null +++ b/tests/dataset.py @@ -0,0 +1,34 @@ +import datetime +# simple timeseries data set to load in from disk +class Dataset: + + + def __init__(self, set_name): + self.values = [] + self.start = None + self.end = None + self.index = 0 + with open("tests/datasets/Set_%s.csv"%set_name,"r") as results: + for line in results.readlines(): + date,val,qual = line.strip().split(",") + _d = datetime.datetime.fromisoformat(date) + if self.start == None: + self.start = _d + self.values.append( (_d,float(val),int(qual))) + self.end = _d + + def values_all(self): + self.index = self.index + 1 + return self.values[self.index-1] + + + def values_only(self): + self.index = self.index + 1 + return self.values[self.index-1][1] + +class Result: + def __init__(self, result_set_name): + self.values = [] + with open("tests/datasets/Result_%s.res" %result_set_name,"r") as results: + for value in results.readlines(): + self.values.append( float(value) ) diff --git a/tests/datasets/Result_SimpleStageTimes2.res b/tests/datasets/Result_SimpleStageTimes2.res new file mode 100644 index 0000000..cecf967 --- /dev/null +++ b/tests/datasets/Result_SimpleStageTimes2.res @@ -0,0 +1,8 @@ +2 +4 +6 +8 +10 +12 +14 +16 \ No newline at end of file diff --git a/tests/datasets/Set_SimpleStage.csv b/tests/datasets/Set_SimpleStage.csv new file mode 100644 index 0000000..d1b07be --- /dev/null +++ b/tests/datasets/Set_SimpleStage.csv @@ -0,0 +1,8 @@ +2021-01-01T00:00:00+00:00,1,0 +2021-01-01T00:15:00+00:00,2,0 +2021-01-01T00:30:00+00:00,3,0 +2021-01-01T00:45:00+00:00,4,0 +2021-01-01T01:00:00+00:00,5,0 +2021-01-01T01:15:00+00:00,6,0 +2021-01-01T01:30:00+00:00,7,0 +2021-01-01T01:45:00+00:00,8,0 \ No newline at end of file diff --git a/tests/test_value.py b/tests/test_value.py index 80615ed..8172560 100644 --- a/tests/test_value.py +++ b/tests/test_value.py @@ -4,7 +4,7 @@ import datetime sys.path.append("../") - +from . dataset import Dataset,Result from repgen.data import Value from repgen.util import TZ @@ -34,3 +34,33 @@ def data(): assert v.values[3][1] == 3 assert v.values[4][1] == 4 assert v.values[8][1] == 8 + + +def test_simple_sum(): + v1 = Value(1) + v2 = Value(2) + v3 = v1+v2 + assert v3.value == 3 + +def test_multiply(): + stage = Dataset("SimpleStage") + assert stage.start != None + assert stage.end != None + assert len(stage.values) > 0 + + def data(): + data.index += 1 + return stage.values[data.index-1][1] + data.index = 0 + data.stage = stage + + v1 = Value(dbtype="GENTS", value = data, tz="UTC",start=stage.start,end=stage.end, interval = datetime.timedelta(minutes=15), picture="%0.02f") + assert len(v1.values) > 0 + + v2 = v1*2 + + result = Result("SimpleStageTimes2") + assert len(v2.values) > 0 + + for i in range(len(v2.values)): + assert int(v2.values[i][1]) == int(result.values[i]) \ No newline at end of file diff --git a/unittest.cfg b/unittest.cfg new file mode 100644 index 0000000..51ed898 --- /dev/null +++ b/unittest.cfg @@ -0,0 +1,3 @@ +[coverage] +always-on = True +coverage = repgen