Skip to content

Commit 56feb61

Browse files
authored
Add tests for reading and writing digital lines with varying lines pe… (#618)
* Add tests for reading and writing digital lines with varying lines per channel * fixup! Add tests for reading and writing digital lines with varying lines per channel * fixup! Add tests for reading and writing digital lines with varying lines per channel
1 parent 19a9d47 commit 56feb61

File tree

2 files changed

+61
-4
lines changed

2 files changed

+61
-4
lines changed

tests/component/test_stream_readers_di.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99
import nidaqmx
1010
import nidaqmx.system
1111
from nidaqmx.constants import LineGrouping
12-
from nidaqmx.stream_readers import (
13-
DigitalMultiChannelReader,
14-
DigitalSingleChannelReader,
15-
)
12+
from nidaqmx.stream_readers import DigitalMultiChannelReader, DigitalSingleChannelReader
1613
from nidaqmx.utils import flatten_channel_string
1714

1815

@@ -400,6 +397,25 @@ def test___digital_multi_channel_reader___read_one_sample_multi_line___returns_v
400397
)
401398

402399

400+
def test___digital_multi_channel_reader___read_one_sample_multi_line_jagged___returns_valid_samples(
401+
di_multi_channel_port_uint32_task: nidaqmx.Task,
402+
) -> None:
403+
reader = DigitalMultiChannelReader(di_multi_channel_port_uint32_task.in_stream)
404+
num_channels = di_multi_channel_port_uint32_task.number_of_channels
405+
samples_to_read = 256
406+
sample = numpy.full((num_channels, 32), False, dtype=numpy.bool_)
407+
408+
data = [
409+
_read_and_copy(reader.read_one_sample_multi_line, sample) for _ in range(samples_to_read)
410+
]
411+
412+
assert [
413+
[_bool_array_to_int(sample[chan, :]) for chan in range(num_channels)] for sample in data
414+
] == _get_expected_digital_port_data_sample_major(
415+
di_multi_channel_port_uint32_task, samples_to_read
416+
)
417+
418+
403419
def test___digital_multi_channel_reader___read_one_sample_multi_line_with_wrong_dtype___raises_error_with_correct_dtype(
404420
di_multi_channel_multi_line_task: nidaqmx.Task,
405421
) -> None:

tests/component/test_stream_writers_do.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,19 @@ def di_port1_loopback_task(
171171
return task
172172

173173

174+
@pytest.fixture
175+
def di_port2_loopback_task(
176+
generate_task: Callable[[], nidaqmx.Task], real_x_series_device: nidaqmx.system.Device
177+
) -> nidaqmx.Task:
178+
task = generate_task()
179+
task.di_channels.add_di_chan(
180+
real_x_series_device.di_ports[2].name,
181+
line_grouping=LineGrouping.CHAN_FOR_ALL_LINES,
182+
)
183+
_start_di_task(task)
184+
return task
185+
186+
174187
@pytest.fixture
175188
def di_multi_channel_port_loopback_task(
176189
generate_task: Callable[[], nidaqmx.Task], real_x_series_device: nidaqmx.system.Device
@@ -431,6 +444,34 @@ def test___digital_multi_channel_writer___write_one_sample_multi_line___updates_
431444
assert di_multi_line_loopback_task.read() == datum
432445

433446

447+
def test___digital_multi_channel_writer___write_one_sample_multi_line_jagged___updates_output(
448+
di_port0_loopback_task: nidaqmx.Task,
449+
di_port1_loopback_task: nidaqmx.Task,
450+
di_port2_loopback_task: nidaqmx.Task,
451+
generate_task: Callable[[], nidaqmx.Task],
452+
real_x_series_device: nidaqmx.system.Device,
453+
) -> None:
454+
task = generate_task()
455+
for port in real_x_series_device.do_ports:
456+
task.do_channels.add_do_chan(
457+
port.name,
458+
line_grouping=LineGrouping.CHAN_FOR_ALL_LINES,
459+
)
460+
_start_do_task(task, is_port=True, num_chans=task.number_of_channels)
461+
writer = DigitalMultiChannelWriter(task.out_stream)
462+
num_channels = task.number_of_channels
463+
samples_to_write = 0xA5
464+
465+
# "sweep" up to the final value, the only one we'll validate
466+
for datum in _get_digital_data(num_channels * 32, samples_to_write):
467+
data_to_write = _int_to_bool_array(num_channels * 32, datum).reshape((num_channels, 32))
468+
writer.write_one_sample_multi_line(data_to_write)
469+
470+
assert di_port0_loopback_task.read() == datum & 0xFFFFFFFF
471+
assert di_port1_loopback_task.read() == (datum >> 32) & 0xFF
472+
assert di_port2_loopback_task.read() == (datum >> 64) & 0xFF
473+
474+
434475
def test___digital_multi_channel_writer___write_one_sample_multi_line_with_wrong_dtype___raises_error_with_correct_dtype(
435476
do_multi_channel_multi_line_task: nidaqmx.Task,
436477
) -> None:

0 commit comments

Comments
 (0)