606SCENARIO(
"INDI callbacks validate their source properties",
"[adcTracker]" )
609#ifdef ADCTRACK_TEST_DOXYGEN_REF
619 adcTracker_test tracker(
"adcTracker_validation" );
621 WHEN(
"the tracking callback receives the wrong device" )
623 pcf::IndiProperty ip( pcf::IndiProperty::Switch );
624 ip.setDevice(
"wrong" );
625 ip.setName(
"tracking" );
626 ip.add( pcf::IndiElement(
"toggle" ) );
627 ip[
"toggle"].setSwitchState( pcf::IndiElement::On );
629 REQUIRE( tracker.newCallBack_m_indiP_tracking( ip ) == -1 );
632 WHEN(
"the deltaAngle callback receives the wrong property name" )
634 pcf::IndiProperty ip( pcf::IndiProperty::Number );
635 ip.setDevice(
"adcTracker_validation" );
636 ip.setName(
"wrong" );
637 ip.add( pcf::IndiElement(
"target" ) );
638 ip[
"target"].set( 1.0f );
640 REQUIRE( tracker.newCallBack_m_indiP_deltaAngle( ip ) == -1 );
643 WHEN(
"the deltaADC1 callback receives a valid payload" )
645 pcf::IndiProperty ip( pcf::IndiProperty::Number );
646 ip.setDevice(
"adcTracker_validation" );
647 ip.setName(
"deltaADC1" );
648 ip.add( pcf::IndiElement(
"target" ) );
649 ip[
"target"].set( 2.0f );
651 REQUIRE( tracker.newCallBack_m_indiP_deltaADC1( ip ) == 0 );
654 WHEN(
"the deltaADC2 callback receives a valid payload" )
656 pcf::IndiProperty ip( pcf::IndiProperty::Number );
657 ip.setDevice(
"adcTracker_validation" );
658 ip.setName(
"deltaADC2" );
659 ip.add( pcf::IndiElement(
"target" ) );
660 ip[
"target"].set( 3.0f );
662 REQUIRE( tracker.newCallBack_m_indiP_deltaADC2( ip ) == 0 );
665 WHEN(
"the minZD callback receives a valid payload" )
667 pcf::IndiProperty ip( pcf::IndiProperty::Number );
668 ip.setDevice(
"adcTracker_validation" );
669 ip.setName(
"minZD" );
670 ip.add( pcf::IndiElement(
"target" ) );
671 ip[
"target"].set( 4.0f );
673 REQUIRE( tracker.newCallBack_m_indiP_minZD( ip ) == 0 );
676 WHEN(
"the teldata callback receives the wrong device" )
678 pcf::IndiProperty ip( pcf::IndiProperty::Number );
679 ip.setDevice(
"wrong" );
680 ip.setName(
"teldata" );
681 ip.add( pcf::IndiElement(
"zd" ) );
682 ip[
"zd"].set( 5.0f );
684 REQUIRE( tracker.setCallBack_m_indiP_teldata( ip ) == -1 );
687 WHEN(
"the teldata callback receives a valid payload" )
689 pcf::IndiProperty ip( pcf::IndiProperty::Number );
690 ip.setDevice(
"tcsi" );
691 ip.setName(
"teldata" );
692 ip.add( pcf::IndiElement(
"zd" ) );
693 ip[
"zd"].set( 6.0f );
695 REQUIRE( tracker.setCallBack_m_indiP_teldata( ip ) == 0 );
703SCENARIO(
"adcTracker configuration loading preserves defaults and applies overrides",
"[adcTracker]" )
706#ifdef ADCTRACK_TEST_DOXYGEN_REF
712 GIVEN(
"an empty config file after setupConfig" )
714 std::string root = testRoot(
"config_defaults" );
715 mx::app::writeConfigFile( root +
"/adcTracker_test.conf", {}, {}, {} );
717 adcTracker_test tracker(
"adcTracker_config_defaults", root );
718 tracker.setupTestConfig();
719 tracker.readConfigFile( root +
"/adcTracker_test.conf" );
721 tracker.loadOwnConfig();
723 REQUIRE( tracker.lookupFile() ==
"adc_lookup_table.txt" );
724 REQUIRE( tracker.adc1zero() == Approx( 0.0f ) );
725 REQUIRE( tracker.adc1lupsign() == 1 );
726 REQUIRE( tracker.adc2zero() == Approx( 0.0f ) );
727 REQUIRE( tracker.adc2lupsign() == 1 );
728 REQUIRE( tracker.deltaAngle() == Approx( 0.0f ) );
729 REQUIRE( tracker.adc1delta() == Approx( 0.0f ) );
730 REQUIRE( tracker.adc2delta() == Approx( 0.0f ) );
731 REQUIRE( tracker.minZD() == Approx( 5.1f ) );
732 REQUIRE( tracker.adc1DevName() ==
"stageadc1" );
733 REQUIRE( tracker.adc2DevName() ==
"stageadc2" );
734 REQUIRE( tracker.tcsDevName() ==
"tcsi" );
735 REQUIRE( tracker.updateInterval() == Approx( 10.0f ) );
738 GIVEN(
"a config file overriding the ADC tracker parameters" )
740 std::string root = testRoot(
"config_overrides" );
741 mx::app::writeConfigFile( root +
"/adcTracker_test.conf",
768 {
"custom_lookup.txt",
782 adcTracker_test tracker(
"adcTracker_config_overrides", root );
783 tracker.setupTestConfig();
784 tracker.readConfigFile( root +
"/adcTracker_test.conf" );
786 tracker.loadOwnConfig();
788 REQUIRE( tracker.lookupFile() ==
"custom_lookup.txt" );
789 REQUIRE( tracker.adc1zero() == Approx( 12.5f ) );
790 REQUIRE( tracker.adc1lupsign() == -1 );
791 REQUIRE( tracker.adc2zero() == Approx( -7.5f ) );
792 REQUIRE( tracker.adc2lupsign() == -1 );
793 REQUIRE( tracker.deltaAngle() == Approx( 4.5f ) );
794 REQUIRE( tracker.adc1delta() == Approx( 1.5f ) );
795 REQUIRE( tracker.adc2delta() == Approx( -2.5f ) );
796 REQUIRE( tracker.minZD() == Approx( 8.2f ) );
797 REQUIRE( tracker.adc1DevName() ==
"adc1custom" );
798 REQUIRE( tracker.adc2DevName() ==
"adc2custom" );
799 REQUIRE( tracker.tcsDevName() ==
"tcsi_custom" );
800 REQUIRE( tracker.updateInterval() == Approx( 3.5f ) );
808SCENARIO(
"adcTracker callbacks update runtime state from valid INDI payloads",
"[adcTracker]" )
811#ifdef ADCTRACK_TEST_DOXYGEN_REF
821 std::string root = testRoot(
"callback_behavior" );
822 adcTracker_test tracker(
"adcTracker_callback_behavior", root );
824 GIVEN(
"a tracking callback payload" )
826 tracker.setLastUpdate( 42.0 );
828 REQUIRE( tracker.applyTracking(
true ) == 0 );
829 REQUIRE( tracker.tracking() ==
true );
830 REQUIRE( tracker.lastUpdate() == Approx( 0.0 ) );
832 tracker.setLastUpdate( 84.0 );
834 REQUIRE( tracker.applyTracking(
false ) == 0 );
835 REQUIRE( tracker.tracking() ==
false );
836 REQUIRE( tracker.lastUpdate() == Approx( 0.0 ) );
839 GIVEN(
"numeric offset callback payloads" )
841 REQUIRE( tracker.applyDeltaAngle( 7.25f ) == 0 );
842 REQUIRE( tracker.deltaAngle() == Approx( 7.25f ) );
844 REQUIRE( tracker.applyDeltaADC1( -1.5f ) == 0 );
845 REQUIRE( tracker.adc1delta() == Approx( -1.5f ) );
847 REQUIRE( tracker.applyDeltaADC2( 2.75f ) == 0 );
848 REQUIRE( tracker.adc2delta() == Approx( 2.75f ) );
850 REQUIRE( tracker.applyMinZD( 11.0f ) == 0 );
851 REQUIRE( tracker.minZD() == Approx( 11.0f ) );
854 GIVEN(
"numeric callbacks missing their target element" )
856 pcf::IndiProperty deltaAngleIP( pcf::IndiProperty::Number );
857 deltaAngleIP.setDevice(
"adcTracker_callback_behavior" );
858 deltaAngleIP.setName(
"deltaAngle" );
859 REQUIRE( tracker.newCallBack_m_indiP_deltaAngle( deltaAngleIP ) == -1 );
861 pcf::IndiProperty deltaADC1IP( pcf::IndiProperty::Number );
862 deltaADC1IP.setDevice(
"adcTracker_callback_behavior" );
863 deltaADC1IP.setName(
"deltaADC1" );
864 REQUIRE( tracker.newCallBack_m_indiP_deltaADC1( deltaADC1IP ) == -1 );
866 pcf::IndiProperty deltaADC2IP( pcf::IndiProperty::Number );
867 deltaADC2IP.setDevice(
"adcTracker_callback_behavior" );
868 deltaADC2IP.setName(
"deltaADC2" );
869 REQUIRE( tracker.newCallBack_m_indiP_deltaADC2( deltaADC2IP ) == -1 );
871 pcf::IndiProperty minZDIP( pcf::IndiProperty::Number );
872 minZDIP.setDevice(
"adcTracker_callback_behavior" );
873 minZDIP.setName(
"minZD" );
874 REQUIRE( tracker.newCallBack_m_indiP_minZD( minZDIP ) == -1 );
877 GIVEN(
"a tracking callback payload missing the toggle element" )
879 pcf::IndiProperty ip( pcf::IndiProperty::Switch );
880 ip.setDevice(
"adcTracker_callback_behavior" );
881 ip.setName(
"tracking" );
883 REQUIRE( tracker.newCallBack_m_indiP_tracking( ip ) == 0 );
886 GIVEN(
"a valid teldata.zd payload" )
888 REQUIRE( tracker.applyTeldataZD( 33.5f ) == 0 );
889 REQUIRE( tracker.zd() == Approx( 33.5f ) );
890 REQUIRE( tracker.haveZD() ==
true );
893 GIVEN(
"a teldata payload missing the zd element" )
895 pcf::IndiProperty ip( pcf::IndiProperty::Number );
896 ip.setDevice(
"tcsi" );
897 ip.setName(
"teldata" );
899 REQUIRE( tracker.setCallBack_m_indiP_teldata( ip ) == 0 );
900 REQUIRE( tracker.haveZD() ==
false );
947SCENARIO(
"adcTracker startup validates the lookup table before running",
"[adcTracker]" )
950#ifdef ADCTRACK_TEST_DOXYGEN_REF
955 GIVEN(
"a valid lookup table" )
957 std::string root = testRoot(
"startup_valid" );
958 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
960 adcTracker_test tracker(
"adcTracker_test_valid", root );
962 REQUIRE( tracker.startup() == 0 );
963 REQUIRE( tracker.lookupReady() );
964 REQUIRE( tracker.maxZD() == Approx( 20.0f ) );
965 REQUIRE( tracker.belowMinZDStatus() ==
false );
966 REQUIRE( tracker.aboveMaxZDStatus() ==
false );
970 GIVEN(
"a missing lookup table" )
972 std::string root = testRoot(
"startup_missing" );
973 adcTracker_test tracker(
"adcTracker_test_missing", root );
975 REQUIRE( tracker.startup() == -1 );
976 REQUIRE( tracker.lookupReady() ==
false );
979 GIVEN(
"a lookup table with too few rows" )
981 std::string root = testRoot(
"startup_too_few_rows" );
982 writeLookupTable( root +
"/calib",
"0,0,0\n" );
984 adcTracker_test tracker(
"adcTracker_test_too_few_rows", root );
986 REQUIRE( tracker.startup() == -1 );
987 REQUIRE( tracker.lookupReady() ==
false );
990 GIVEN(
"a lookup table with a malformed row" )
992 std::string root = testRoot(
"startup_malformed_row" );
993 writeLookupTable( root +
"/calib",
"0,0,0\n10,10\n20,20,40\n" );
995 adcTracker_test tracker(
"adcTracker_test_malformed_row", root );
997 REQUIRE( tracker.startup() == -1 );
998 REQUIRE( tracker.lookupReady() ==
false );
1001 GIVEN(
"a lookup table with non-monotonic zenith-distance samples" )
1003 std::string root = testRoot(
"startup_non_monotonic" );
1004 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n10,20,40\n" );
1006 adcTracker_test tracker(
"adcTracker_test_non_monotonic", root );
1008 REQUIRE( tracker.startup() == -1 );
1009 REQUIRE( tracker.lookupReady() ==
false );
1012 GIVEN(
"a valid lookup table and an injected std::exception during interpolator setup" )
1014 std::string root = testRoot(
"startup_interp_std_exception" );
1015 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1017 adcTracker_test tracker(
"adcTracker_test_interp_std_exception", root );
1018 tracker.setSetupInterpolatorExceptionMode( adcTracker_test::exceptionMode::stdException );
1020 REQUIRE( tracker.startup() == -1 );
1021 REQUIRE( tracker.lookupReady() ==
false );
1024 GIVEN(
"a valid lookup table and an injected non-standard exception during interpolator setup" )
1026 std::string root = testRoot(
"startup_interp_unknown_exception" );
1027 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1029 adcTracker_test tracker(
"adcTracker_test_interp_unknown_exception", root );
1030 tracker.setSetupInterpolatorExceptionMode( adcTracker_test::exceptionMode::nonStdException );
1032 REQUIRE( tracker.startup() == -1 );
1033 REQUIRE( tracker.lookupReady() ==
false );
1041SCENARIO(
"adcTracker appLogic sends ADC targets only when tracking data are ready",
"[adcTracker]" )
1044#ifdef ADCTRACK_TEST_DOXYGEN_REF
1049 WHEN(
"tracking is disabled" )
1051 std::string root = testRoot(
"logic_tracking_disabled" );
1052 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1054 adcTracker_test tracker(
"adcTracker_logic_tracking_disabled", root );
1055 REQUIRE( tracker.startup() == 0 );
1057 tracker.setUpdateInterval( 0.0f );
1058 tracker.setLastUpdate( 0.0 );
1059 tracker.setZeros( 1.0f, 2.0f );
1060 tracker.setSigns( 1, 1 );
1061 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1062 tracker.setMinZDValue( 5.1f );
1063 tracker.resetSent();
1065 tracker.setTracking(
false );
1066 tracker.setZD( 15.0f );
1068 REQUIRE( tracker.logic() == 0 );
1069 REQUIRE( tracker.sendCount() == 0 );
1072 WHEN(
"tracking is enabled before any valid zenith distance is received" )
1074 std::string root = testRoot(
"logic_no_zd" );
1075 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1077 adcTracker_test tracker(
"adcTracker_logic_no_zd", root );
1078 REQUIRE( tracker.startup() == 0 );
1080 tracker.setUpdateInterval( 0.0f );
1081 tracker.setLastUpdate( 0.0 );
1082 tracker.setZeros( 1.0f, 2.0f );
1083 tracker.setSigns( 1, 1 );
1084 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1085 tracker.setMinZDValue( 5.1f );
1086 tracker.resetSent();
1088 tracker.setTracking(
true );
1089 tracker.setZD( 0.0f,
false );
1091 REQUIRE( tracker.logic() == 0 );
1092 REQUIRE( tracker.sendCount() == 0 );
1095 WHEN(
"the INDI mutex is already locked by another scope" )
1097 std::string root = testRoot(
"logic_mutex_locked" );
1098 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1100 adcTracker_test tracker(
"adcTracker_logic_mutex_locked", root );
1101 REQUIRE( tracker.startup() == 0 );
1103 tracker.setUpdateInterval( 0.0f );
1104 tracker.setLastUpdate( 0.0 );
1105 tracker.setTracking(
true );
1106 tracker.setZD( 15.0f );
1107 tracker.resetSent();
1109 auto lock = tracker.lockIndiMutex();
1111 REQUIRE( tracker.logic() == 0 );
1112 REQUIRE( tracker.sendCount() == 0 );
1115 WHEN(
"the zenith distance is within the lookup table range" )
1117 std::string root = testRoot(
"logic_interpolate" );
1118 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1120 adcTracker_test tracker(
"adcTracker_logic_interpolate", root );
1121 REQUIRE( tracker.startup() == 0 );
1123 tracker.setUpdateInterval( 0.0f );
1124 tracker.setLastUpdate( 0.0 );
1125 tracker.setZeros( 1.0f, 2.0f );
1126 tracker.setSigns( 1, 1 );
1127 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1128 tracker.setMinZDValue( 5.1f );
1129 tracker.resetSent();
1131 tracker.setTracking(
true );
1132 tracker.setZD( 15.0f );
1134 REQUIRE( tracker.logic() == 0 );
1135 REQUIRE( tracker.sendCount() == 2 );
1136 REQUIRE( tracker.lastADC1() == Approx( 24.0f ) );
1137 REQUIRE( tracker.lastADC2() == Approx( 41.0f ) );
1138 REQUIRE( tracker.belowMinZDStatus() ==
false );
1139 REQUIRE( tracker.aboveMaxZDStatus() ==
false );
1142 WHEN(
"the zenith distance is below minZD" )
1144 std::string root = testRoot(
"logic_below_min_zd" );
1145 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1147 adcTracker_test tracker(
"adcTracker_logic_below_min_zd", root );
1148 REQUIRE( tracker.startup() == 0 );
1150 tracker.setUpdateInterval( 0.0f );
1151 tracker.setLastUpdate( 0.0 );
1152 tracker.setZeros( 1.0f, 2.0f );
1153 tracker.setSigns( 1, 1 );
1154 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1155 tracker.setMinZDValue( 5.1f );
1156 tracker.resetSent();
1158 tracker.setTracking(
true );
1159 tracker.setZD( 2.0f );
1161 REQUIRE( tracker.logic() == 0 );
1162 REQUIRE( tracker.sendCount() == 2 );
1163 REQUIRE( tracker.lastADC1() == Approx( 9.0f ) );
1164 REQUIRE( tracker.lastADC2() == Approx( 11.0f ) );
1165 REQUIRE( tracker.belowMinZDStatus() ==
true );
1166 REQUIRE( tracker.aboveMaxZDStatus() ==
false );
1169 WHEN(
"the zenith distance is above the lookup-table maximum" )
1171 std::string root = testRoot(
"logic_above_max_zd" );
1172 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1174 adcTracker_test tracker(
"adcTracker_logic_above_max_zd", root );
1175 REQUIRE( tracker.startup() == 0 );
1177 tracker.setUpdateInterval( 0.0f );
1178 tracker.setLastUpdate( 0.0 );
1179 tracker.setZeros( 1.0f, 2.0f );
1180 tracker.setSigns( 1, 1 );
1181 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1182 tracker.setMinZDValue( 5.1f );
1183 tracker.resetSent();
1185 tracker.setTracking(
true );
1186 tracker.setZD( 30.0f );
1188 REQUIRE( tracker.logic() == 0 );
1189 REQUIRE( tracker.sendCount() == 2 );
1190 REQUIRE( tracker.lastADC1() == Approx( 29.0f ) );
1191 REQUIRE( tracker.lastADC2() == Approx( 51.0f ) );
1192 REQUIRE( tracker.belowMinZDStatus() ==
false );
1193 REQUIRE( tracker.aboveMaxZDStatus() ==
true );
1196 WHEN(
"interpolation throws a std::exception" )
1198 std::string root = testRoot(
"logic_interpolation_std_exception" );
1199 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1201 adcTracker_test tracker(
"adcTracker_logic_interpolation_std_exception", root );
1202 REQUIRE( tracker.startup() == 0 );
1204 tracker.setUpdateInterval( 0.0f );
1205 tracker.setLastUpdate( 0.0 );
1206 tracker.setZeros( 1.0f, 2.0f );
1207 tracker.setSigns( 1, 1 );
1208 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1209 tracker.setMinZDValue( 5.1f );
1210 tracker.setTracking(
true );
1211 tracker.setZD( 15.0f );
1212 tracker.setInterpolationExceptionMode( adcTracker_test::exceptionMode::stdException );
1213 tracker.resetSent();
1215 REQUIRE( tracker.logic() == 0 );
1216 REQUIRE( tracker.sendCount() == 0 );
1219 WHEN(
"interpolation throws a non-standard exception" )
1221 std::string root = testRoot(
"logic_interpolation_unknown_exception" );
1222 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1224 adcTracker_test tracker(
"adcTracker_logic_interpolation_unknown_exception", root );
1225 REQUIRE( tracker.startup() == 0 );
1227 tracker.setUpdateInterval( 0.0f );
1228 tracker.setLastUpdate( 0.0 );
1229 tracker.setZeros( 1.0f, 2.0f );
1230 tracker.setSigns( 1, 1 );
1231 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1232 tracker.setMinZDValue( 5.1f );
1233 tracker.setTracking(
true );
1234 tracker.setZD( 15.0f );
1235 tracker.setInterpolationExceptionMode( adcTracker_test::exceptionMode::nonStdException );
1236 tracker.resetSent();
1238 REQUIRE( tracker.logic() == 0 );
1239 REQUIRE( tracker.sendCount() == 0 );
1242 WHEN(
"sending ADC 1 fails during appLogic" )
1244 std::string root = testRoot(
"logic_send_adc1_failure" );
1245 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1247 adcTracker_test tracker(
"adcTracker_logic_send_adc1_failure", root );
1248 REQUIRE( tracker.startup() == 0 );
1250 tracker.setUpdateInterval( 0.0f );
1251 tracker.setLastUpdate( 0.0 );
1252 tracker.setZeros( 1.0f, 2.0f );
1253 tracker.setSigns( 1, 1 );
1254 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1255 tracker.setMinZDValue( 5.1f );
1256 tracker.setTracking(
true );
1257 tracker.setZD( 15.0f );
1258 tracker.setADC1SendFailure(
true );
1259 tracker.resetSent();
1261 REQUIRE( tracker.logic() == 0 );
1262 REQUIRE( tracker.sendCount() == 0 );
1265 WHEN(
"sending ADC 2 fails during appLogic" )
1267 std::string root = testRoot(
"logic_send_adc2_failure" );
1268 writeLookupTable( root +
"/calib",
"0,0,0\n10,10,20\n20,20,40\n" );
1270 adcTracker_test tracker(
"adcTracker_logic_send_adc2_failure", root );
1271 REQUIRE( tracker.startup() == 0 );
1273 tracker.setUpdateInterval( 0.0f );
1274 tracker.setLastUpdate( 0.0 );
1275 tracker.setZeros( 1.0f, 2.0f );
1276 tracker.setSigns( 1, 1 );
1277 tracker.setOffsets( 5.0f, 3.0f, 4.0f );
1278 tracker.setMinZDValue( 5.1f );
1279 tracker.setTracking(
true );
1280 tracker.setZD( 15.0f );
1281 tracker.setADC2SendFailure(
true );
1282 tracker.resetSent();
1284 REQUIRE( tracker.logic() == 0 );
1285 REQUIRE( tracker.sendCount() == 1 );
1286 REQUIRE( tracker.belowMinZDStatus() ==
false );
1287 REQUIRE( tracker.aboveMaxZDStatus() ==
false );
1340SCENARIO(
"adcTracker static callback wrappers forward correctly",
"[adcTracker]" )
1342 adcTracker_test tracker(
"adcTracker_static_wrappers", testRoot(
"static_wrappers" ) );
1344 GIVEN(
"a valid tracking callback payload" )
1346 pcf::IndiProperty ip( pcf::IndiProperty::Switch );
1347 ip.setDevice(
"adcTracker_static_wrappers" );
1348 ip.setName(
"tracking" );
1349 ip.add( pcf::IndiElement(
"toggle" ) );
1350 ip[
"toggle"].setSwitchState( pcf::IndiElement::On );
1352 REQUIRE( tracker.staticTrackingCallback( ip ) == 0 );
1353 REQUIRE( tracker.tracking() ==
true );
1356 GIVEN(
"a valid deltaAngle callback payload" )
1358 pcf::IndiProperty ip( pcf::IndiProperty::Number );
1359 ip.setDevice(
"adcTracker_static_wrappers" );
1360 ip.setName(
"deltaAngle" );
1361 ip.add( pcf::IndiElement(
"target" ) );
1362 ip[
"target"].set( 4.0f );
1364 REQUIRE( tracker.staticDeltaAngleCallback( ip ) == 0 );
1365 REQUIRE( tracker.deltaAngle() == Approx( 4.0f ) );
1368 GIVEN(
"a valid deltaADC1 callback payload" )
1370 pcf::IndiProperty ip( pcf::IndiProperty::Number );
1371 ip.setDevice(
"adcTracker_static_wrappers" );
1372 ip.setName(
"deltaADC1" );
1373 ip.add( pcf::IndiElement(
"target" ) );
1374 ip[
"target"].set( -1.0f );
1376 REQUIRE( tracker.staticDeltaADC1Callback( ip ) == 0 );
1377 REQUIRE( tracker.adc1delta() == Approx( -1.0f ) );
1380 GIVEN(
"a valid deltaADC2 callback payload" )
1382 pcf::IndiProperty ip( pcf::IndiProperty::Number );
1383 ip.setDevice(
"adcTracker_static_wrappers" );
1384 ip.setName(
"deltaADC2" );
1385 ip.add( pcf::IndiElement(
"target" ) );
1386 ip[
"target"].set( 2.5f );
1388 REQUIRE( tracker.staticDeltaADC2Callback( ip ) == 0 );
1389 REQUIRE( tracker.adc2delta() == Approx( 2.5f ) );
1392 GIVEN(
"a valid minZD callback payload" )
1394 pcf::IndiProperty ip( pcf::IndiProperty::Number );
1395 ip.setDevice(
"adcTracker_static_wrappers" );
1396 ip.setName(
"minZD" );
1397 ip.add( pcf::IndiElement(
"target" ) );
1398 ip[
"target"].set( 9.5f );
1400 REQUIRE( tracker.staticMinZDCallback( ip ) == 0 );
1401 REQUIRE( tracker.minZD() == Approx( 9.5f ) );
1404 GIVEN(
"a valid teldata callback payload" )
1406 pcf::IndiProperty ip( pcf::IndiProperty::Number );
1407 ip.setDevice(
"tcsi" );
1408 ip.setName(
"teldata" );
1409 ip.add( pcf::IndiElement(
"zd" ) );
1410 ip[
"zd"].set( 22.0f );
1412 REQUIRE( tracker.staticTeldataCallback( ip ) == 0 );
1413 REQUIRE( tracker.zd() == Approx( 22.0f ) );
1414 REQUIRE( tracker.haveZD() ==
true );