Newer
Older
from math import sqrt
import pytest
from b_asic.signal_generator import (
Constant,
Impulse,
Sinusoid,
Step,
ZeroPad,
_AddGenerator,
_DivGenerator,
_MulGenerator,
_SubGenerator,
)
def test_impulse():
g = Impulse()
assert g(0) == 1
assert g(1) == 0
assert g(2) == 0
assert g(0) == 0
assert g(1) == 1
assert g(2) == 0
def test_step():
g = Step()
assert g(0) == 1
assert g(1) == 1
assert g(2) == 1
assert g(0) == 0
assert g(1) == 1
assert g(2) == 1
def test_constant():
g = Constant()
assert g(0) == 1
assert g(1) == 1
assert g(2) == 1
assert g(0) == 0.5
assert g(1) == 0.5
assert g(2) == 0.5
def test_zeropad():
g = ZeroPad([0.4, 0.6])
assert g(-1) == 0
assert g(0) == 0.4
assert g(1) == 0.6
assert g(2) == 0
assert str(g) == "ZeroPad([0.4, 0.6])"
def test_sinusoid():
g = Sinusoid(0.5)
assert g(0) == 0
assert g(1) == 1
assert g(2) == pytest.approx(0)
assert g(3) == -1
g = Sinusoid(0.5, 0.25)
assert g(0) == pytest.approx(sqrt(2) / 2)
assert g(1) == pytest.approx(sqrt(2) / 2)
assert g(2) == pytest.approx(-sqrt(2) / 2)
assert g(3) == pytest.approx(-sqrt(2) / 2)
assert str(g) == "Sinusoid(0.5, 0.25)"
def test_addition():
g = Impulse() + Impulse(2)
assert g(0) == 1
assert g(1) == 0
assert g(2) == 1
assert g(3) == 0
assert str(g) == "Impulse() + Impulse(2)"
assert isinstance(g, _AddGenerator)
assert g(0) == 1
assert g(1) == 1
assert g(2) == 2
assert g(3) == 1
assert str(g) == "1.0 + Impulse(2)"
assert isinstance(g, _AddGenerator)
assert g(0) == 1
assert g(1) == 2
assert g(2) == 1
assert g(3) == 1
assert isinstance(g, _AddGenerator)
def test_subtraction():
g = Impulse() - Impulse(2)
assert g(0) == 1
assert g(1) == 0
assert g(2) == -1
assert g(3) == 0
assert str(g) == "Impulse() - Impulse(2)"
assert isinstance(g, _SubGenerator)
assert g(0) == 1
assert g(1) == 1
assert g(2) == 0
assert g(3) == 1
assert isinstance(g, _SubGenerator)
assert g(0) == -1
assert g(1) == -1
assert g(2) == 0
assert g(3) == -1
assert isinstance(g, _SubGenerator)
def test_multiplication():
g = Impulse() * 0.5
assert g(0) == 0.5
assert g(1) == 0
assert g(2) == 0
assert isinstance(g, _MulGenerator)
g = 2 * Sinusoid(0.5, 0.25)
assert g(0) == pytest.approx(sqrt(2))
assert g(1) == pytest.approx(sqrt(2))
assert g(2) == pytest.approx(-sqrt(2))
assert g(3) == pytest.approx(-sqrt(2))
assert str(g) == "2 * Sinusoid(0.5, 0.25)"
assert isinstance(g, _MulGenerator)
g = Step(1) * (Sinusoid(0.5, 0.25) + 1.0)
assert g(1) == pytest.approx(sqrt(2) / 2 + 1)
assert g(2) == pytest.approx(-sqrt(2) / 2 + 1)
assert g(3) == pytest.approx(-sqrt(2) / 2 + 1)
assert str(g) == "Step(1) * (Sinusoid(0.5, 0.25) + 1.0)"
assert isinstance(g, _MulGenerator)
def test_division():
g = Step() / 2
assert g(-1) == 0.0
assert g(0) == 0.5
assert g(1) == 0.5
assert g(2) == 0.5
assert isinstance(g, _DivGenerator)
g = 0.5 / Step()
assert g(0) == 0.5
assert g(1) == 0.5
assert g(2) == 0.5
assert isinstance(g, _DivGenerator)
g = Sinusoid(0.5, 0.25) / (0.5 * Step())
assert g(0) == pytest.approx(sqrt(2))
assert g(1) == pytest.approx(sqrt(2))
assert g(2) == pytest.approx(-sqrt(2))
assert g(3) == pytest.approx(-sqrt(2))
assert str(g) == "Sinusoid(0.5, 0.25) / (0.5 * Step())"
assert isinstance(g, _DivGenerator)