UNPKG

rclnodejs

Version:
65 lines (54 loc) 1.74 kB
// Cross-process data integrity test: validates data from external ROS2 publisher 'use strict'; const rclnodejs = require('./index.js'); const EXPECTED_DATA = [1.0, 2.0, 3.0]; async function main() { await rclnodejs.init(); const node = new rclnodejs.Node('xproc_data_sub'); let msgCount = 0; let errCount = 0; const errors = []; node.createSubscription( 'std_msgs/msg/Float64MultiArray', '/xproc_data_topic', (msg) => { msgCount++; if (!msg || !msg.data) { errCount++; errors.push(`msg#${msgCount}: missing data`); } else { const arr = Array.from(msg.data); for (let i = 0; i < EXPECTED_DATA.length; i++) { if (Math.abs(arr[i] - EXPECTED_DATA[i]) > 1e-9) { errCount++; errors.push( `msg#${msgCount}: data[${i}] expected ${EXPECTED_DATA[i]}, got ${arr[i]}` ); } } if (arr.length !== EXPECTED_DATA.length) { errCount++; errors.push( `msg#${msgCount}: expected ${EXPECTED_DATA.length} elements, got ${arr.length}` ); } } } ); rclnodejs.spin(node); console.log('Listening on /xproc_data_topic for 10s...'); setTimeout(() => { console.log(`\n=== Cross-Process Data Integrity ===`); console.log(`Received: ${msgCount} messages`); console.log(`Data errors: ${errCount}`); if (errors.length > 0) { errors.slice(0, 10).forEach((e) => console.log(` ${e}`)); } const pass = errCount === 0 && msgCount > 0; console.log(`Result: ${pass ? 'PASS' : 'FAIL'}`); node.stop(); rclnodejs.shutdown(); process.exit(0); }, 10000); } main().catch(console.error);