#! /usr/bin/env python3 # -*- coding: utf-8 -*- # pylint: disable=missing-module-docstring import pytest import h5py from lisainstrument import Instrument def test_run(): """Test that simulations can run.""" instru = Instrument(size=100) instru.simulate() instru.write(mode='w') def test_run_no_aafilter(): """Test that simulations can run with no filter.""" instru = Instrument(size=100, aafilter=None) instru.simulate() instru.write(mode='w') def test_run_no_upsampling(): """Test that simulations can run with no filter.""" instru = Instrument(size=100, physics_upsampling=1, aafilter=None) instru.simulate() instru.write(mode='w') def test_no_orbit_file(): """Test that simulations fail with an invalid orbit file.""" with pytest.raises(FileNotFoundError): Instrument(size=100, orbits='tests/nonexistent-orbits.h5') with pytest.raises(FileNotFoundError): Instrument(size=100, t0=0, orbits='tests/nonexistent-orbits.h5') def test_keplerian_orbits_1_0_2(): """Test that simulations can run with Keplerian orbit files v1.0.2.""" instru = Instrument(size=100, orbits='tests/keplerian-orbits-1-0-2.h5') instru.simulate() instru.write(mode='w') def test_esa_orbits_1_0_2(): """Test that simulations can run with ESA orbit files v1.0.2.""" instru = Instrument(size=100, orbits='tests/esa-orbits-1-0-2.h5') instru.simulate() instru.write(mode='w') def test_keplerian_orbits_2_0(): """Test that simulations can run with Keplerian orbit files v2.0.""" instru = Instrument(size=100, orbits='tests/keplerian-orbits-2-0.h5') instru.simulate() instru.write(mode='w') def test_esa_trailing_orbits_2_0(): """Test that simulations can run with ESA trailing orbit files v2.0.""" instru = Instrument(size=100, orbits='tests/esa-trailing-orbits-2-0.h5') instru.simulate() instru.write(mode='w') def test_locking(): """Test that simulations can run with various lock configurations.""" # Test six free-running lasers instru = Instrument(size=100, lock="six") instru.simulate() instru.write(mode="w") # Test three free-running lasers instru = Instrument(size=100, lock="three") instru.simulate() instru.write(mode="w") # Test non-swap configurations for i in range(1, 6): for primary in ['12', '23', '31', '13', '32', '21']: instru = Instrument(size=100, lock=f'N{i}-{primary}') instru.simulate() instru.write(mode='w') # Test that any other raises an error with pytest.raises(ValueError): Instrument(size=100, lock='whatever') with pytest.raises(ValueError): Instrument(size=100, lock='N7-12') with pytest.raises(ValueError): Instrument(size=100, lock='N1-67') def test_initial_telemetry_size(): """Test that simulations can run with a nonzero initial telemetry size.""" orbit_paths = [ "tests/keplerian-orbits-1-0-2.h5", "tests/esa-orbits-1-0-2.h5", "tests/keplerian-orbits-2-0.h5", "tests/esa-trailing-orbits-2-0.h5", ] for orbit_path in orbit_paths: # Read orbit file t0 and leave room for initial telemetry with h5py.File(orbit_path, 'r') as orbitf: t0 = orbitf.attrs['t0'] + 1E6 instru = Instrument( initial_telemetry_size=10, telemetry_downsampling=100, orbits=orbit_path, size=100, t0=t0) instru.simulate() instru.write(mode='w')