Share waveform data and plot navigation and retain processing results

This commit is contained in:
2026-09-27 02:47:24 +03:00
parent 513e79b127
commit caf30f2ed6
5 changed files with 534 additions and 31 deletions

View File

@@ -0,0 +1,37 @@
"""Waveform data helpers run independently of SETGUI and Qt."""
import io
import json
import unittest
from set_devices.generator_data import (
parse_signal_csv, signal_csv_channels, preset_points, generate,
load_recipe, resample_signal, nearest_f407_sample_rate,
)
from set_devices.waveform import recipe
from set_devices.plot_processing import Axis, Series, Snapshot, prepare, process, write_csv
class GeneratorDataTests(unittest.TestCase):
def test_processing_csv_roundtrip_into_generator(self):
request = prepare(Snapshot((Series('a', 'A', [(1000, 0), (1010, 2), (1020, 0)]),),
Axis('Время', 'мс', 'unix_ms')), 'a', 'linear', 21)
output = io.StringIO()
write_csv(process(request), output)
self.assertEqual(1, len(signal_csv_channels(output.getvalue())))
points, rate = parse_signal_csv(output.getvalue())
self.assertEqual((0, 0), points[0])
self.assertEqual((20, 0), points[-1])
self.assertIsNone(rate)
def test_samples_recipe_and_resampling(self):
points = preset_points(0, 3.3)
samples = resample_signal(points, 10000)
self.assertEqual(200, len(samples))
wave = generate(samples, 10000, method='samples')
restored, settings = load_recipe(json.dumps(recipe(wave.points, 10000, 3.3, 'samples', 2)))
self.assertEqual(wave.points, restored)
self.assertEqual('samples', settings['method'])
self.assertEqual(10000, nearest_f407_sample_rate(10001))
if __name__ == '__main__':
unittest.main()