Files
python-gpiozero/tests/test_source_tools.py
2016-04-05 13:22:40 +01:00

89 lines
2.5 KiB
Python

from __future__ import (
unicode_literals,
absolute_import,
print_function,
division,
)
str = type('')
import pytest
from math import sin, cos, radians
from time import time
from gpiozero import *
try:
from math import isclose
except ImportError:
from gpiozero.compat import isclose
def test_negated():
assert list(negated(())) == []
assert list(negated((True, True, False, False))) == [False, False, True, True]
def test_inverted():
assert list(inverted(())) == []
assert list(inverted((1, 0, 0.1, 0.5))) == [0, 1, 0.9, 0.5]
def test_scaled():
assert list(scaled((0, 1, 0.5, 0.1), 0, 1)) == [0, 1, 0.5, 0.1]
assert list(scaled((0, 1, 0.5, 0.1), -1, 1)) == [-1, 1, 0.0, -0.8]
def test_clamped():
assert list(clamped((-1, 0, 1, 2))) == [0, 0, 1, 1]
def test_quantized():
assert list(quantized((0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1), 4)) == [
0.0, 0.0, 0.0, 0.25, 0.25, 0.5, 0.5, 0.5, 0.75, 0.75, 1.0]
assert list(quantized((0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1), 5)) == [
0.0, 0.0, 0.2, 0.2, 0.4, 0.4, 0.6, 0.6, 0.8, 0.8, 1.0]
def test_conjunction():
assert list(conjunction(())) == []
assert list(conjunction((False, True))) == [False, True]
assert list(conjunction((0, 1, 0, 1), (0, 0, 0, 1))) == [0, 0, 0, 1]
def test_disjunction():
assert list(disjunction(())) == []
assert list(disjunction((False, True))) == [False, True]
assert list(disjunction((0, 1, 0, 1), (0, 0, 0, 1))) == [0, 1, 0, 1]
def test_averaged():
assert list(averaged(())) == []
assert list(averaged((0, 0.5, 1), (1, 1, 1))) == [0.5, 0.75, 1]
def test_queued():
assert list(queued((1, 2, 3, 4, 5), 5)) == [1]
assert list(queued((1, 2, 3, 4, 5, 6), 5)) == [1, 2]
def test_pre_delayed():
start = time()
for v in pre_delayed((0, 0, 0), 0.01):
assert v == 0
assert time() - start >= 0.01
start = time()
def test_post_delayed():
start = time()
for v in post_delayed((1, 2, 2), 0.01):
if v == 1:
assert time() - start < 0.01
else:
assert time() - start >= 0.01
start = time()
assert time() - start >= 0.01
def test_random_values():
for i, v in zip(range(1000), random_values()):
assert 0 <= v <= 1
def test_sin_values():
for i, v in zip(range(1000), sin_values()):
assert isclose(v, sin(radians(i)), abs_tol=1e-9)
def test_cos_values():
for i, v in zip(range(1000), cos_values()):
assert isclose(v, cos(radians(i)), abs_tol=1e-9)