/** * Copyright - See the COPYRIGHT that is included with this distribution. * pvxs is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. */ #include #include #include #include namespace { using namespace pvxs; void testNTScalar() { testDiag("In %s", __func__); // plain, without display meta auto top = nt::NTScalar{TypeCode::Int32}.create(); testTrue(top.idStartsWith("epics:nt/NTScalar:")); testEq(top["value"].type(), TypeCode::Int32); testEq(top["display.limitLow"].type(), TypeCode::Null); testEq(top["display.description"].type(), TypeCode::Null); testEq(top["control.limitLow"].type(), TypeCode::Null); // with display, but not control top = nt::NTScalar{TypeCode::Float64,true}.create(); testEq(top["value"].type(), TypeCode::Float64); testEq(top["display.limitLow"].type(), TypeCode::Float64); testEq(top["display.description"].type(), TypeCode::String); testEq(top["control.limitLow"].type(), TypeCode::Null); // with everything top = nt::NTScalar{TypeCode::Float64,true,true,true}.create(); testEq(top["value"].type(), TypeCode::Float64); testEq(top["display.limitLow"].type(), TypeCode::Float64); testEq(top["display.description"].type(), TypeCode::String); testEq(top["control.limitLow"].type(), TypeCode::Float64); } void testNTNDArray() { testDiag("In %s", __func__); auto top = nt::NTNDArray{}.create(); testTrue(top.idStartsWith("epics:nt/NTNDArray:")); } void testNTURI() { testDiag("In %s", __func__); using namespace pvxs::members; auto def = nt::NTURI({ UInt32("arg1"), String("arg2"), }); auto top = def.call(42, "hello"); testTrue(top.idStartsWith("epics:nt/NTURI:")); testEq(top["query.arg1"].as(), 42u); testEq(top["query.arg2"].as(), "hello"); } } // namespace MAIN(testnt) { testPlan(17); testNTScalar(); testNTNDArray(); testNTURI(); return testDone(); }