87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
#####################################################
|
|
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.03 #
|
|
#####################################################
|
|
# pytest tests/test_synthetic_utils.py -s #
|
|
#####################################################
|
|
import sys, random
|
|
import unittest
|
|
import pytest
|
|
from pathlib import Path
|
|
|
|
lib_dir = (Path(__file__).parent / ".." / "lib").resolve()
|
|
print("library path: {:}".format(lib_dir))
|
|
if str(lib_dir) not in sys.path:
|
|
sys.path.insert(0, str(lib_dir))
|
|
|
|
from datasets import QuadraticFunc
|
|
from datasets import ConstantGenerator, SinGenerator
|
|
from datasets import DynamicQuadraticFunc
|
|
|
|
|
|
class TestQuadraticFunc(unittest.TestCase):
|
|
"""Test the quadratic function."""
|
|
|
|
def test_simple(self):
|
|
function = QuadraticFunc([[0, 1], [0.5, 4], [1, 1]])
|
|
print(function)
|
|
for x in (0, 0.5, 1):
|
|
print("f({:})={:}".format(x, function(x)))
|
|
thresh = 0.2
|
|
self.assertTrue(abs(function(0) - 1) < thresh)
|
|
self.assertTrue(abs(function(0.5) - 4) < thresh)
|
|
self.assertTrue(abs(function(1) - 1) < thresh)
|
|
|
|
def test_none(self):
|
|
function = QuadraticFunc()
|
|
function.fit([[0, 1], [0.5, 4], [1, 1]], max_iter=3000, verbose=False)
|
|
print(function)
|
|
thresh = 0.15
|
|
self.assertTrue(abs(function(0) - 1) < thresh)
|
|
self.assertTrue(abs(function(0.5) - 4) < thresh)
|
|
self.assertTrue(abs(function(1) - 1) < thresh)
|
|
|
|
|
|
class TestConstantGenerator(unittest.TestCase):
|
|
"""Test the constant data generator."""
|
|
|
|
def test_simple(self):
|
|
dataset = ConstantGenerator()
|
|
for i, (idx, t, x) in enumerate(dataset):
|
|
assert i == idx, "First loop: {:} vs {:}".format(i, idx)
|
|
assert x == 0.1
|
|
|
|
|
|
class TestSinGenerator(unittest.TestCase):
|
|
"""Test the synethtic data generator."""
|
|
|
|
def test_simple(self):
|
|
dataset = SinGenerator()
|
|
for i, (idx, t, x) in enumerate(dataset):
|
|
assert i == idx, "First loop: {:} vs {:}".format(i, idx)
|
|
for i, (idx, t, x) in enumerate(dataset):
|
|
assert i == idx, "Second loop: {:} vs {:}".format(i, idx)
|
|
|
|
|
|
class TestDynamicFunc(unittest.TestCase):
|
|
"""Test DynamicQuadraticFunc."""
|
|
|
|
def test_simple(self):
|
|
timestamps = 30
|
|
function = DynamicQuadraticFunc()
|
|
function_param = dict()
|
|
function_param[0] = SinGenerator(
|
|
num=timestamps, num_sin_phase=4, phase_shift=1.0, max_amplitude=1.0
|
|
)
|
|
function_param[1] = ConstantGenerator(constant=0.9)
|
|
function_param[2] = SinGenerator(
|
|
num=timestamps, num_sin_phase=5, phase_shift=0.4, max_amplitude=0.9
|
|
)
|
|
function.set(function_param)
|
|
print(function)
|
|
|
|
with self.assertRaises(TypeError) as context:
|
|
function(0)
|
|
|
|
function.set_timestamp(1)
|
|
print(function(2))
|