-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Also added more descriptive errors for invalid source/destination values. Fixes #44
- Loading branch information
Showing
3 changed files
with
152 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
# SPDX-FileCopyrightText: KB Sriram | ||
# | ||
# SPDX-License-Identifier: MIT | ||
|
||
""" | ||
Tests in | ||
""" | ||
|
||
import pytest | ||
from pytest_helpers import assert_assembles_to, assert_assembly_fails | ||
|
||
|
||
@pytest.mark.parametrize( | ||
"source,expected", | ||
[ | ||
("pins", 0b000), | ||
("x", 0b001), | ||
("y", 0b010), | ||
("null", 0b011), | ||
("isr", 0b110), | ||
("osr", 0b111), | ||
], | ||
) | ||
def test_in_sources(source: str, expected: int) -> None: | ||
# delay src bitcount | ||
encoding = 0b010_00000_000_10001 | ||
# add in the expected source | ||
encoding |= expected << 5 | ||
assert_assembles_to(f"in {source}, 17", [encoding]) | ||
|
||
|
||
@pytest.mark.parametrize("delay", [0, 1, 9, 17, 31]) | ||
def test_in_delay(delay: int) -> None: | ||
# delay src bitcount | ||
encoding = 0b010_00000_000_10001 | ||
# add in the expected delay | ||
encoding |= delay << 8 | ||
assert_assembles_to(f"in pins, 17 [{delay}]", [encoding]) | ||
|
||
|
||
@pytest.mark.parametrize("bitcount", [1, 9, 17, 32]) | ||
def test_in_bitcount(bitcount: int) -> None: | ||
# delay dst bitcount | ||
encoding = 0b010_00000_000_00000 | ||
# add in the expected bitcount. Note that | ||
# 32 should be encoded as 0, which we do by | ||
# masking the bitcount with 0x1f | ||
encoding |= bitcount & 0x1F | ||
assert_assembles_to(f"in pins, {bitcount}", [encoding]) | ||
|
||
|
||
def test_in_delay_with_sideset() -> None: | ||
source = [ | ||
".side_set 2", | ||
"in pins 17 side 2 [5]", | ||
] | ||
assert_assembles_to("\n".join(source), [0b010_10_101_000_10001]) | ||
|
||
|
||
def test_in_bad_source(): | ||
assert_assembly_fails( | ||
"in bad, 17", match="Invalid in source 'bad'", errtype=ValueError | ||
) | ||
|
||
|
||
def test_in_bad_bitcount(): | ||
assert_assembly_fails( | ||
"in pins, 0", match="Count out of range", errtype=RuntimeError | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# SPDX-FileCopyrightText: KB Sriram | ||
# | ||
# SPDX-License-Identifier: MIT | ||
|
||
""" | ||
Tests out | ||
""" | ||
|
||
import pytest | ||
from pytest_helpers import assert_assembles_to, assert_assembly_fails | ||
|
||
|
||
@pytest.mark.parametrize( | ||
"destination,expected", | ||
[ | ||
("pins", 0b000), | ||
("x", 0b001), | ||
("y", 0b010), | ||
("null", 0b011), | ||
("pindirs", 0b100), | ||
("pc", 0b101), | ||
("isr", 0b110), | ||
("exec", 0b111), | ||
], | ||
) | ||
def test_out_destinations(destination: str, expected: int) -> None: | ||
# delay dst bitcount | ||
encoding = 0b011_00000_000_10001 | ||
# add in the expected destination | ||
encoding |= expected << 5 | ||
assert_assembles_to(f"out {destination}, 17", [encoding]) | ||
|
||
|
||
@pytest.mark.parametrize("delay", [0, 1, 9, 17, 31]) | ||
def test_out_delay(delay: int) -> None: | ||
# delay dst bitcount | ||
encoding = 0b011_00000_000_10001 | ||
# add in the expected delay | ||
encoding |= delay << 8 | ||
assert_assembles_to(f"out pins, 17 [{delay}]", [encoding]) | ||
|
||
|
||
@pytest.mark.parametrize("bitcount", [1, 9, 17, 32]) | ||
def test_out_bitcount(bitcount: int) -> None: | ||
# delay dst bitcount | ||
encoding = 0b011_00000_000_00000 | ||
# add in the expected bitcount. Note that | ||
# 32 should be encoded as 0, which we do by | ||
# masking the bitcount with 0x1f | ||
encoding |= bitcount & 0x1F | ||
assert_assembles_to(f"out pins, {bitcount}", [encoding]) | ||
|
||
|
||
def test_out_delay_with_sideset() -> None: | ||
source = [ | ||
".side_set 2", | ||
"out pins 17 side 2 [5]", | ||
] | ||
assert_assembles_to("\n".join(source), [0b011_10_101_000_10001]) | ||
|
||
|
||
def test_out_bad_destination(): | ||
assert_assembly_fails( | ||
"out bad, 17", match="Invalid out destination 'bad'", errtype=ValueError | ||
) | ||
|
||
|
||
def test_out_bad_bitcount(): | ||
assert_assembly_fails( | ||
"out pins, 0", match="Count out of range", errtype=RuntimeError | ||
) |