diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..8b64129 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,30 @@ +name: ch_ephem-tests +on: + pull_request: + branches: + - master + push: + branches: + - master + +jobs: + run-tests: + + strategy: + matrix: + python-version: ["3.9", "3.12"] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install pip dependencies + run: pip install -e .[test] + + - name: Run tests + run: pytest -v . diff --git a/ch_ephem/observers.py b/ch_ephem/observers.py index 2d1e82d..bc1fe26 100644 --- a/ch_ephem/observers.py +++ b/ch_ephem/observers.py @@ -58,7 +58,7 @@ _observers = None # tangent-space offset representation. -_offset = namedtuple("Offset", ["x", "y", "z"]) +Offset = namedtuple("Offset", ["x", "y", "z"]) class Observer(CaputObserver): @@ -94,7 +94,7 @@ def __init__( super().__init__(lon, lat, alt, lsd_start, sf_wrapper) self.rotation = rot self.roll = roll - self.offset = _offset(*offset) + self.offset = Offset(*offset) def all() -> dict[str, Observer]: diff --git a/tests/test_observers.py b/tests/test_observers.py new file mode 100644 index 0000000..643589b --- /dev/null +++ b/tests/test_observers.py @@ -0,0 +1,31 @@ +"""Test ch_ephem.observers""" + +import pickle + +from ch_ephem import observers + + +def test_pickle_observers(): + """Observers should be picklable.""" + + # These are all small powers of two to + # avoid floating-point shennanigans + test = observers.Observer(lat=1, lon=2, alt=4, rot=8, roll=16, offset=(32, 64, 128)) + + pickled = pickle.dumps(test) + assert pickled is not None + + result = pickle.loads(pickled) + + assert result.latitude == 1 + assert result.longitude == 2 + assert result.altitude == 4 + assert result.rotation == 8 + assert result.roll == 16 + assert result.offset.x == 32 + assert result.offset.y == 64 + assert result.offset.z == 128 + + repickled = pickle.dumps(result) + + assert pickled == repickled