def test_query_broker_tests(): broker = createBroker(2) vFed1, fedinfo1 = createValueFederate(1, "fed0") vFed2, fedinfo2 = createValueFederate(1, "fed1") core = h.helicsFederateGetCoreObject(vFed1) q1 = h.helicsCreateQuery("root", "federates") res = h.helicsQueryCoreExecute(q1, core) name1 = h.helicsFederateGetName(vFed1) name2 = h.helicsFederateGetName(vFed2) try: assert f"[{name1};{name2}]" == res except AssertionError: assert [name1, name2] == res res = h.helicsQueryExecute(q1, vFed1) try: assert f"[{name1};{name2}]" == res except AssertionError: assert [name1, name2] == res h.helicsFederateEnterInitializingModeAsync(vFed1) h.helicsFederateEnterInitializingMode(vFed2) h.helicsFederateEnterInitializingModeComplete(vFed1) h.helicsQueryFree(q1) h.helicsCoreFree(core) h.helicsFederateFinalizeAsync(vFed1) h.helicsFederateFinalize(vFed2) h.helicsFederateFinalizeComplete(vFed1) destroyFederate(vFed1, fedinfo1) destroyFederate(vFed2, fedinfo2) destroyBroker(broker)
def test_iteration_execution_iteration_test(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") # register the publications pubid = h.helicsFederateRegisterGlobalPublication( vFed1, "pub1", h.HELICS_DATA_TYPE_DOUBLE, "") subid = h.helicsFederateRegisterSubscription(vFed1, "pub1", "") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_DELTA, 1.0) h.helicsFederateEnterInitializingMode(vFed1) h.helicsPublicationPublishDouble(pubid, 27.0) comp = h.helicsFederateEnterExecutingModeIterative( vFed1, h.HELICS_ITERATION_REQUEST_ITERATE_IF_NEEDED) assert comp == h.HELICS_ITERATION_RESULT_ITERATING val = h.helicsInputGetDouble(subid) assert val == 27.0 comp = h.helicsFederateEnterExecutingModeIterative( vFed1, h.HELICS_ITERATION_REQUEST_ITERATE_IF_NEEDED) assert comp == h.HELICS_ITERATION_RESULT_NEXT_STEP val2 = h.helicsInputGetDouble(subid) assert val2 == val h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_bad_input_tests_raw_tests(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "test") pubid = h.helicsFederateRegisterPublication(vFed1, "pub1", h.HELICS_DATA_TYPE_RAW, "") subid = h.helicsFederateRegisterGlobalInput(vFed1, "inp1", h.HELICS_DATA_TYPE_RAW, "") h.helicsPublicationAddTarget(pubid, "inp1") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) h.helicsFederateEnterExecutingMode(vFed1) h.helicsPublicationPublishRaw(pubid, b"hello world") h.helicsFederateRequestNextStep(vFed1) s = h.helicsInputGetRawValue(subid) assert s == b"hello world" h.helicsPublicationPublishDouble(pubid, 27) h.helicsFederateRequestNextStep(vFed1) s = h.helicsInputGetComplex(subid) assert complex(*s) != 27 + 0j h.helicsFederateFinalize(vFed1) t, res = h.helicsFederateRequestTimeIterative( vFed1, 1.0, h.HELICS_ITERATION_REQUEST_NO_ITERATION) assert res == h.HELICS_ITERATION_RESULT_HALTED destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_valuefederate_test_single_transfer(): broker = createBroker() vFed, fedinfo = createValueFederate() s = "n2" pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_STRING, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsFederateEnterExecutingMode(vFed) h.helicsPublicationPublishString(pubid, "string1") grantedtime = h.helicsFederateRequestTime(vFed, 1.0) assert grantedtime == 0.01 s = h.helicsInputGetString(subid) assert s == "string1" t = h.helicsInputLastUpdateTime(subid) assert t == 0.01 h.helicsPublicationPublishString(pubid, "string2") destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_test_string(): broker = createBroker() vFed, fedinfo = createValueFederate() defaultValue = "String1" testValue = "String2" pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_STRING, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsInputSetDefaultString(subid, defaultValue) h.helicsFederateEnterExecutingMode(vFed) h.helicsPublicationPublishString(pubid, testValue) value = h.helicsInputGetString(subid) assert value == defaultValue grantedtime = h.helicsFederateRequestTime(vFed, 1.0) assert grantedtime == 0.01 value = h.helicsInputGetString(subid) assert value == testValue destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_test_vectord(): broker = createBroker() vFed, fedinfo = createValueFederate() defaultValue = [0.0, 1.0, 2.0] testValue = [3.0, 4.0, 5.0] pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_VECTOR, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsInputSetDefaultVector(subid, defaultValue) h.helicsFederateEnterExecutingMode(vFed) h.helicsPublicationPublishVector(pubid, testValue) assert h.helicsInputGetVector(subid) == defaultValue grantedtime = h.helicsFederateRequestTime(vFed, 1.0) assert grantedtime == 0.01 value = h.helicsInputGetVector(subid) assert value == testValue destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_test_complex(): broker = createBroker() vFed, fedinfo = createValueFederate() rDefaultValue = 1.0 iDefaultValue = 1.0 rTestValue = 2.0 iTestValue = 2.0 pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_COMPLEX, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsInputSetDefaultComplex(subid, complex(rDefaultValue, iDefaultValue)) h.helicsFederateEnterExecutingMode(vFed) # publish string1 at time=0.0 h.helicsPublicationPublishComplex(pubid, complex(rTestValue, iTestValue)) assert (rDefaultValue, iDefaultValue) == h.helicsInputGetComplex(subid) grantedtime = h.helicsFederateRequestTime(vFed, 1.0) assert grantedtime == 0.01 assert (rTestValue, iTestValue) == h.helicsInputGetComplex(subid) destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_test_integer(): broker = createBroker() vFed, fedinfo = createValueFederate() defaultValue = 1 testValue = 2 pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_INT, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsInputSetDefaultInteger(subid, defaultValue) h.helicsFederateEnterExecutingMode(vFed) h.helicsPublicationPublishInteger(pubid, testValue) value = h.helicsInputGetInteger(subid) assert value == defaultValue grantedtime = h.helicsFederateRequestTime(vFed, 1.0) assert grantedtime == 0.01 value = h.helicsInputGetInteger(subid) assert value == testValue h.helicsPublicationPublishInteger(pubid, testValue + 1) grantedtime = h.helicsFederateRequestTime(vFed, 2.0) assert grantedtime == 0.02 value = h.helicsInputGetInteger(subid) assert value == testValue + 1 destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_publisher_registration(): broker = createBroker() vFed, fedinfo = createValueFederate() pubid1 = h.helicsFederateRegisterPublication(vFed, "pub1", h.HELICS_DATA_TYPE_STRING, "") pubid2 = h.helicsFederateRegisterGlobalPublication(vFed, "pub2", h.HELICS_DATA_TYPE_INT, "") pubid3 = h.helicsFederateRegisterPublication(vFed, "pub3", h.HELICS_DATA_TYPE_DOUBLE, "V") h.helicsFederateEnterExecutingMode(vFed) publication_key = h.helicsPublicationGetKey(pubid1) assert publication_key == "TestA Federate/pub1" publication_type = h.helicsPublicationGetType(pubid1) assert publication_type == "string" publication_key = h.helicsPublicationGetKey(pubid2) assert publication_key == "pub2" publication_key = h.helicsPublicationGetKey(pubid3) assert publication_key == "TestA Federate/pub3" publication_type = h.helicsPublicationGetType(pubid3) assert publication_type == "double" publication_units = h.helicsPublicationGetUnits(pubid3) assert publication_units == "V" publication_type = h.helicsPublicationGetType(pubid2) assert publication_type == "int64" destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_test_info_filed(): broker = createBroker() vFed, fedinfo = createValueFederate(1, "fed0") h.helicsFederateSetFlagOption(vFed, h.HELICS_HANDLE_OPTION_CONNECTION_OPTIONAL, True) # register the publications/subscriptions subid1 = h.helicsFederateRegisterSubscription(vFed, "sub1", "") pubid1 = h.helicsFederateRegisterTypePublication(vFed, "pub1", "string", "") pubid2 = h.helicsFederateRegisterGlobalTypePublication(vFed, "pub2", "string", "") # Set info fields h.helicsInputSetInfo(subid1, "sub1_test") h.helicsPublicationSetInfo(pubid1, "pub1_test") h.helicsPublicationSetInfo(pubid2, "pub2_test") h.helicsFederateEnterExecutingMode(vFed) assert h.helicsInputGetInfo(subid1) == "sub1_test" assert h.helicsPublicationGetInfo(pubid1) == "pub1_test" assert h.helicsPublicationGetInfo(pubid2) == "pub2_test" cr = h.helicsFederateGetCoreObject(vFed) h.helicsFederateFinalize(vFed) wait = h.helicsCoreWaitForDisconnect(cr, 70) if wait is False: wait = h.helicsCoreWaitForDisconnect(cr, 500) assert wait is True destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_query_federate_tests(): broker = createBroker(2) vFed1, fedinfo1 = createValueFederate(1, "fed0") vFed2, fedinfo2 = createValueFederate(1, "fed1") h.helicsFederateRegisterGlobalTypePublication(vFed1, "pub1", "double", "") h.helicsFederateRegisterTypePublication(vFed1, "pub2", "double", "") h.helicsFederateRegisterTypePublication(vFed2, "pub3", "double", "") h.helicsFederateEnterInitializingModeAsync(vFed1) h.helicsFederateEnterInitializingMode(vFed2) h.helicsFederateEnterInitializingModeComplete(vFed1) core = h.helicsFederateGetCoreObject(vFed1) q1 = h.helicsCreateQuery("Testfed0", "publications") res = h.helicsQueryCoreExecute(q1, core) try: assert res == "[pub1;Testfed0/pub2]" except: assert res == ["pub1", "Testfed0/pub2"] # res = h.helicsQueryExecute(q1, vFed2) # assert res == "[pub1;Testfed0/pub2]" h.helicsQueryFree(q1) # q1 = h.helicsCreateQuery("Testfed1", "isinit") # res = h.helicsQueryExecute(q1, vFed1) # assert res, "True" # h.helicsQueryFree(q1) # q1 = h.helicsCreateQuery("Testfed1", "publications") # res = h.helicsQueryExecute(q1, vFed1) # assert res == "[Testfed1/pub3]" # h.helicsQueryFree(q1) h.helicsCoreFree(core) h.helicsFederateFinalizeAsync(vFed1) h.helicsFederateFinalize(vFed2) h.helicsFederateFinalizeComplete(vFed1) destroyFederate(vFed1, fedinfo1) destroyFederate(vFed2, fedinfo2) destroyBroker(broker)
def test_bad_input_init_error(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") # register the publications # the types here don't match which causes an error when initializing the federation h.helicsFederateRegisterGlobalTypePublication(vFed1, "pub1", "custom1", "") subid = h.helicsFederateRegisterTypeInput(vFed1, "inp1", "custom2", "") k1 = h.helicsInputGetKey(subid) # check some other calls inp2 = h.helicsFederateGetInput(vFed1, "inp1") k2 = h.helicsInputGetKey(inp2) assert k1 == k2 inp3 = h.helicsFederateGetInputByIndex(vFed1, 0) k3 = h.helicsInputGetKey(inp3) assert k1 == k3 h.helicsInputAddTarget(subid, "pub1") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) # unknown publication with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorInvalidArgument pub3 = h.helicsFederateGetPublication(vFed1, "unknown") # error in this call from the mismatch with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorConnectionFailure h.helicsFederateEnterInitializingMode(vFed1) with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorInvalidFunctionCall h.helicsFederateRequestTimeAdvance(vFed1, 0.1) # unknown input with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorInvalidArgument inp4 = h.helicsFederateGetInput(vFed1, "unknown") # invalid input index # TODO: does this test segfault some times? with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorInvalidArgument inp5 = h.helicsFederateGetInputByIndex(vFed1, 4) h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_valuefederate_state(): broker = createBroker() vFed, fedinfo = createValueFederate() state = h.helicsFederateGetState(vFed) assert state == 0 h.helicsFederateEnterExecutingMode(vFed) state = h.helicsFederateGetState(vFed) assert state == 2 destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_test_bool(): broker = createBroker() vFed, fedinfo = createValueFederate() defaultValue = True testValue1 = True testValue2 = False # register the publications pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_BOOLEAN, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsInputSetDefaultBoolean(subid, defaultValue) h.helicsFederateEnterExecutingMode(vFed) # publish string1 at time=0.0 h.helicsPublicationPublishBoolean(pubid, testValue1) val = h.helicsInputGetBoolean(subid) assert val == defaultValue grantedtime = h.helicsFederateRequestTime(vFed, 1.0) assert grantedtime == 0.01 # get the value val = h.helicsInputGetBoolean(subid) # make sure the string is what we expect assert val == testValue1 # publish a second string h.helicsPublicationPublishBoolean(pubid, testValue2) # make sure the value is still what we expect val = h.helicsInputGetBoolean(subid) assert val == testValue1 # advance time grantedtime = h.helicsFederateRequestTime(vFed, 2.0) # make sure the value was updated assert grantedtime == 0.02 val = h.helicsInputGetBoolean(subid) assert val == testValue2 destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_valuefederate_named_point(): broker = createBroker() vFed, fedinfo = createValueFederate() defaultValue = "start of a longer string in place of the shorter one and now this should be very long" defVal = 5.3 # testValue1 = "inside of the functional relationship of helics" testValue1 = "short string" testVal1 = 45.7823 testValue2 = "I am a string" testVal2 = 0.0 pubid = h.helicsFederateRegisterGlobalPublication(vFed, "pub1", h.HELICS_DATA_TYPE_NAMED_POINT, "") subid = h.helicsFederateRegisterSubscription(vFed, "pub1", "") h.helicsInputSetDefaultNamedPoint(subid, defaultValue, defVal) h.helicsFederateEnterExecutingMode(vFed) # publish string1 at time=0.0 h.helicsPublicationPublishNamedPoint(pubid, testValue1, testVal1) assert h.helicsInputGetNamedPoint(subid) == (defaultValue, defVal) assert h.helicsFederateRequestTime(vFed, 1.0) == 0.01 # # get the value assert h.helicsInputGetNamedPoint(subid) == (testValue1, testVal1) # publish a second string h.helicsPublicationPublishNamedPoint(pubid, testValue2, testVal2) # # make sure the value is still what we expect assert h.helicsInputGetNamedPoint(subid) == (testValue1, testVal1) # # make sure the string is what we expect # # assert value3 == testValue1 # assert val3 == [testValue1, testVal1] # # advance time assert h.helicsFederateRequestTime(vFed, 2.0) == 0.02 # # make sure the value was updated assert h.helicsInputGetNamedPoint(subid) == (testValue2, testVal2) destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_bad_inputs_frees(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") fi = h.helicsCreateFederateInfo() h.helicsFederateInfoSetBroker(fi, "broker test") h.helicsFederateEnterInitializingMode(vFed1) h.helicsFederateFinalize(vFed1) h.helicsFederateInfoSetBrokerPort(fi, 8929) h.helicsFederateInfoSetLocalPort(fi, "8229") h.helicsFederateInfoFree(fi) h.helicsFederateFree(vFed1) # @test_throws h.HELICSErrorInvalidObject with pt.raises(h.HelicsException): destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_valuefederate_publication_registration(): broker = createBroker() vFed, fedinfo = createValueFederate() pubid1 = h.helicsFederateRegisterTypePublication(vFed, "pub1", "string", "") pubid2 = h.helicsFederateRegisterGlobalTypePublication(vFed, "pub2", "int", "") pubid3 = h.helicsFederateRegisterTypePublication(vFed, "pub3", "double", "V") h.helicsFederateEnterExecutingMode(vFed) assert h.helicsPublicationGetKey(pubid1) == "TestA Federate/pub1" assert h.helicsPublicationGetKey(pubid2) == "pub2" assert h.helicsPublicationGetKey(pubid3) == "TestA Federate/pub3" assert h.helicsPublicationGetType(pubid3) == "double" assert h.helicsPublicationGetUnits(pubid3) == "V" destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_bad_input_duplicate_publication_and_input_pathways(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") pubid = h.helicsFederateRegisterTypePublication(vFed1, "pub1", "string", "") # @test_throws h.HELICSErrorRegistrationFailure with pt.raises(h.HelicsException): pubid2 = h.helicsFederateRegisterTypePublication( vFed1, "pub1", "string", "") subid = h.helicsFederateRegisterGlobalTypeInput(vFed1, "inp1", "string", "") # @test_throws h.HELICSErrorRegistrationFailure with pt.raises(h.HelicsException): subid2 = h.helicsFederateRegisterGlobalTypeInput( vFed1, "inp1", "string", "") # @test_throws h.HELICSErrorInvalidObject ept = h.helicsFederateRegisterEndpoint(vFed1, "ept1", "") h.helicsInputAddTarget(subid, "Testfed0/pub1") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) h.helicsFederateEnterExecutingMode(vFed1) h.helicsPublicationPublishDouble(pubid, 27.0) h.helicsFederateRequestNextStep(vFed1) str = h.helicsInputGetString(subid) assert str[0] == "2" assert str[1] == "7" messages = h.helicsFederatePendingMessages(vFed1) assert messages == 0 h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_bad_inputs_core_link(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") # register the publications h.helicsFederateRegisterGlobalTypePublication(vFed1, "pub1", "custom1", "") h.helicsFederateRegisterTypeInput(vFed1, "inp1", "custom2", "") fed2 = h.helicsGetFederateByName(h.helicsFederateGetName(vFed1)) assert h.helicsFederateGetName(fed2) == h.helicsFederateGetName(vFed1) # @test_throws h.HELICSErrorInvalidArgument with pt.raises(h.HelicsException): fed3 = h.helicsGetFederateByName("fed_unknown") cr = h.helicsFederateGetCoreObject(vFed1) h.helicsCoreDataLink(cr, "pub1", "fed0/inp1") # @test_throws h.HELICSErrorInvalidArgument with pt.raises(h.HelicsException): h.helicsCoreMakeConnections(cr, "unknownfile.json") # TODO: This test should throw an error # @test_throws h.HELICSErrorInvalidArgument h.helicsCoreDataLink(cr, "pub1", "") # @test_broken False cr2 = h.helicsCoreClone(cr) assert h.helicsCoreGetAddress(cr2) == h.helicsCoreGetAddress(cr) # TODO: this should error as well # h.helicsFederateEnterExecutingMode(vFed1) # @test_broken False h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_bad_inputs_init_error_5(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") # register the publications h.helicsFederateInfoSetSeparator(fedinfo, "-") h.helicsFederateSetSeparator(vFed1, "-") h.helicsFederateRegisterGlobalTypePublication(vFed1, "pub1", "custom1", "") subid = h.helicsFederateRegisterTypeInput(vFed1, "inp1", "custom2", "") h.helicsInputAddTarget(subid, "pub1") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) # @test_throws h.HELICSErrorConnectionFailure with pt.raises(h.HelicsException): resIt = h.helicsFederateEnterExecutingModeIterative( vFed1, h.HELICS_ITERATION_REQUEST_NO_ITERATION) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsFederateRequestTimeIterativeAsync( vFed1, 1.0, h.HELICS_ITERATION_REQUEST_NO_ITERATION) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): res = h.helicsFederateRequestTimeIterativeComplete(vFed1) h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_bad_inputs_broker_link(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") # register the publications h.helicsFederateRegisterGlobalTypePublication(vFed1, "pub1", "custom1", "") h.helicsFederateRegisterTypeInput(vFed1, "inp1", "custom2", "") br = h.helicsBrokerClone(broker) h.helicsBrokerDataLink(br, "pub1", "Testfed0/inp1") # TODO: This test should throw an error # @test_throws h.HELICSErrorInvalidArgument # with pt.raises(h.HelicsException): # h.helicsBrokerDataLink(br, "pub1", "") # @test_broken False # @test_throws h.HELICSErrorInvalidArgument with pt.raises(h.HelicsException): h.helicsBrokerMakeConnections(br, "unknownfile.json") # @test_throws h.HELICSErrorConnectionFailure with pt.raises(h.HelicsException): h.helicsFederateEnterExecutingMode(vFed1) h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) h.helicsBrokerWaitForDisconnect(broker, 200) destroyBroker(broker)
def test_valuefederate_default_value_tests(): broker = createBroker() vFed1, fedinfo = createValueFederate(1, "fed0") inp_raw1 = h.helicsFederateRegisterInput(vFed1, "key1", h.HELICS_DATA_TYPE_RAW, "raw") inp_raw2 = h.helicsFederateRegisterInput(vFed1, "key2", h.HELICS_DATA_TYPE_RAW, "raw") inp_bool = h.helicsFederateRegisterInput(vFed1, "key3", h.HELICS_DATA_TYPE_BOOLEAN, "") inp_time = h.helicsFederateRegisterInput(vFed1, "key4", h.HELICS_DATA_TYPE_TIME, "") inp_char = h.helicsFederateRegisterInput(vFed1, "key5", h.HELICS_DATA_TYPE_STRING, "") inp_vect = h.helicsFederateRegisterInput(vFed1, "key6", h.HELICS_DATA_TYPE_VECTOR, "V") inp_double = h.helicsFederateRegisterInput(vFed1, "key7", h.HELICS_DATA_TYPE_DOUBLE, "kW") inp_double2 = h.helicsFederateRegisterInput(vFed1, "key8", h.HELICS_DATA_TYPE_DOUBLE, "") inp_np = h.helicsFederateRegisterInput(vFed1, "key9", h.HELICS_DATA_TYPE_NAMED_POINT, "") h.helicsInputSetMinimumChange(inp_double, 1100.0) h.helicsInputSetDefaultDouble(inp_double, 10000.0) h.helicsInputSetOption(inp_double2, h.HELICS_HANDLE_OPTION_CONNECTION_REQUIRED, True) pub = h.helicsFederateRegisterPublication(vFed1, "", h.HELICS_DATA_TYPE_INT, "MW") h.helicsPublicationSetOption(pub, h.HELICS_HANDLE_OPTION_CONNECTION_REQUIRED, True) h.helicsPublicationAddTarget(pub, "Testfed0/key7") h.helicsPublicationAddTarget(pub, "Testfed0/key8") h.helicsInputSetDefaultRaw(inp_raw1, "") data = "this is a string" h.helicsInputSetDefaultRaw(inp_raw2, data) h.helicsInputSetDefaultBoolean(inp_bool, True) h.helicsInputSetDefaultTime(inp_time, 12.3) h.helicsInputSetDefaultChar(inp_char, "q") h.helicsInputSetDefaultVector(inp_vect, []) h.helicsInputSetDefaultNamedPoint(inp_np, data, 15.7) h.helicsFederateEnterExecutingMode(vFed1) assert h.helicsInputGetInjectionUnits(inp_double) == "MW" assert h.helicsInputGetInjectionUnits(inp_double2) == "MW" assert h.helicsInputGetType(inp_double) == "double" assert h.helicsInputGetPublicationType(inp_double) == "int64" c2 = h.helicsInputGetChar(inp_char) assert c2 == "q" h.helicsInputGetVector(inp_vect) optset = h.helicsInputGetOption(inp_double2, h.HELICS_HANDLE_OPTION_CONNECTION_REQUIRED) assert optset == 1 optset = h.helicsPublicationGetOption(pub, h.HELICS_HANDLE_OPTION_CONNECTION_REQUIRED) assert optset == 1 h.helicsPublicationPublishInteger(pub, 12) h.helicsFederateRequestNextStep(vFed1) assert h.helicsInputGetDouble(inp_double) == 12000.0 assert h.helicsInputGetDouble(inp_double2) == 12.0 h.helicsPublicationPublishInteger(pub, 13) h.helicsFederateRequestNextStep(vFed1) assert h.helicsInputIsUpdated(inp_double) is False assert h.helicsInputIsUpdated(inp_double2) is True assert h.helicsInputGetDouble(inp_double) == 12000.0 assert h.helicsInputGetDouble(inp_double2) == 13.0 h.helicsPublicationPublishInteger(pub, 15) h.helicsFederateRequestNextStep(vFed1) assert h.helicsInputIsUpdated(inp_double) is True assert h.helicsInputIsUpdated(inp_double2) is True h.helicsInputClearUpdate(inp_double) h.helicsInputClearUpdate(inp_double2) assert h.helicsInputIsUpdated(inp_double) is False assert h.helicsInputIsUpdated(inp_double2) is False _, rval = h.helicsInputGetNamedPoint(inp_np) assert rval == 15.7 out, rval = h.helicsInputGetNamedPoint(inp_np) assert out == "this is a string" assert rval == 15.7 h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_valuefederate_subscription_and_publication_registration(): broker = createBroker() vFed, fedinfo = createValueFederate(1, "fed0") pubid = h.helicsFederateRegisterPublication(vFed, "pub1", h.HELICS_DATA_TYPE_STRING, "") pubid2 = h.helicsFederateRegisterGlobalPublication(vFed, "pub2", h.HELICS_DATA_TYPE_INT, "volts") pubid3 = h.helicsFederateRegisterTypePublication(vFed, "pub3", "double", "V") subid1 = h.helicsFederateRegisterSubscription(vFed, "sub1", "") subid2 = h.helicsFederateRegisterSubscription(vFed, "sub2", "") subid3 = h.helicsFederateRegisterSubscription(vFed, "sub3", "V") h.helicsFederateEnterExecutingMode(vFed) publication_type = h.helicsPublicationGetType(pubid3) assert publication_type == "double" sub_key = h.helicsSubscriptionGetKey(subid1) assert sub_key == "sub1" sub_type = h.helicsInputGetType(subid1) assert sub_type == "" sub_key = h.helicsSubscriptionGetKey(subid2) assert sub_key == "sub2" sub_key = h.helicsSubscriptionGetKey(subid3) assert sub_key == "sub3" sub_type = h.helicsInputGetType(subid3) assert sub_type == "" sub_units = h.helicsInputGetUnits(subid3) assert sub_units == "V" sub_type = h.helicsInputGetType(subid2) assert sub_type == "" subid_b = h.helicsFederateGetSubscription(vFed, "sub1") tmp = h.helicsSubscriptionGetKey(subid_b) assert tmp == "sub1" # check the getSubscriptionByIndex function subid_c = h.helicsFederateGetInputByIndex(vFed, 2) tmp = h.helicsInputGetUnits(subid_c) assert tmp == "V" # check publications sv = h.helicsPublicationGetKey(pubid) sv2 = h.helicsPublicationGetKey(pubid2) assert sv == "Testfed0/pub1" assert sv2 == "pub2" pub3name = h.helicsPublicationGetKey(pubid3) assert pub3name == "Testfed0/pub3" type = h.helicsPublicationGetType(pubid3) assert type == "double" units = h.helicsPublicationGetUnits(pubid3) assert units == "V" # check the getSubscription function pubid_b = h.helicsFederateGetPublication(vFed, "Testfed0/pub1") tmp = h.helicsPublicationGetType(pubid_b) assert tmp == "string" # check the getSubscriptionByIndex function pubid_c = h.helicsFederateGetPublicationByIndex(vFed, 1) tmp = h.helicsPublicationGetUnits(pubid_c) assert tmp == "volts" # this one should be invalid # @test_throws h.HELICSErrorInvalidArgument pubid_d = h.helicsFederateGetPublicationByIndex(vFed, 5) h.helicsFederateFinalize(vFed) state = h.helicsFederateGetState(vFed) assert state == h.HELICS_STATE_FINALIZE destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_bad_inputs_input_tests(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "fed0") # register the publications pubid = h.helicsFederateRegisterGlobalPublication( vFed1, "pub1", h.HELICS_DATA_TYPE_DOUBLE, "") subid = h.helicsFederateRegisterInput(vFed1, "inp1", h.HELICS_DATA_TYPE_DOUBLE, "") # @test_throws h.HELICSErrorRegistrationFailure with pt.raises(h.HelicsException): subid2 = h.helicsFederateRegisterInput(vFed1, "inp1", h.HELICS_DATA_TYPE_DOUBLE, "") h.helicsInputAddTarget(subid, "pub1") vf2 = h.helicsFederateClone(vFed1) assert h.helicsFederateGetName(vFed1) == h.helicsFederateGetName(vf2) h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) # @test_throws h.HELICSErrorInvalidObject with pt.raises(h.HelicsException): ept = h.helicsFederateRegisterEndpoint(vFed1, "ept1", "") h.helicsFederateEnterInitializingMode(vFed1) h.helicsPublicationPublishDouble(pubid, 27.0) comp = h.helicsFederateEnterExecutingModeIterative( vFed1, h.HELICS_ITERATION_REQUEST_FORCE_ITERATION) assert comp == h.HELICS_ITERATION_RESULT_ITERATING val = h.helicsInputGetDouble(subid) assert val == 27.0 valt = h.helicsInputGetTime(subid) assert valt == 27.0 comp = h.helicsFederateEnterExecutingModeIterative( vFed1, h.HELICS_ITERATION_REQUEST_ITERATE_IF_NEEDED) assert comp == h.HELICS_ITERATION_RESULT_NEXT_STEP val2 = h.helicsInputGetDouble(subid) assert val2 == val # expect error entering initializing Mode again # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsFederateEnterInitializingMode(vFed1) # expect error entering initializing Mode again # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsFederateEnterInitializingModeAsync(vFed1) # expect error entering initializing Mode again # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsFederateEnterInitializingModeComplete(vFed1) h.helicsFederateFinalize(vFed1) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_valuefederate_creation(): broker = createBroker() vFed, fedinfo = createValueFederate() destroyFederate(vFed, fedinfo) destroyBroker(broker)
def test_bad_input_type_publication_2_tests(): broker = createBroker(1) vFed1, fedinfo = createValueFederate(1, "test") pubid = h.helicsFederateRegisterGlobalTypePublication( vFed1, "pub1", "string", "") with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorRegistrationFailure pubid2 = h.helicsFederateRegisterGlobalTypePublication( vFed1, "pub1", "string", "") with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorInvalidArgument h.helicsFederateRegisterFromPublicationJSON(vFed1, "unknownfile.json") with pt.raises(h.HelicsException): # @test_throws h.HELICSErrorExternalArgument h.helicsFederateRegisterInterfaces(vFed1, "unknownfile.json") subid = h.helicsFederateRegisterTypeInput(vFed1, "inp1", "string", "") # @test_throws h.HELICSErrorRegistrationFailure with pt.raises(h.HelicsException): subid2 = h.helicsFederateRegisterTypeInput(vFed1, "inp1", "string", "") h.helicsInputAddTarget(subid, "pub1") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) h.helicsFederateEnterExecutingModeIterativeAsync( vFed1, h.HELICS_ITERATION_REQUEST_NO_ITERATION) res = h.helicsFederateEnterExecutingModeIterativeComplete(vFed1) assert res == h.HELICS_ITERATION_RESULT_NEXT_STEP h.helicsPublicationPublishTime(pubid, 27.0) # @test_throws h.HELICSErrorInvalidArgument with pt.raises(h.HelicsException): h.helicsFederatePublishJSON(vFed1, "unknownfile.json") h.helicsFederateRequestNextStep(vFed1) string = h.helicsInputGetString(subid) assert string[0] == "2" assert string[1] == "7" h.helicsFederateClearUpdates(vFed1) h.helicsFederateFinalize(vFed1) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishRaw(pubid, string.encode()) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishString(pubid, string) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishInteger(pubid, 5) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishBoolean(pubid, True) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishDouble(pubid, 39.2) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishTime(pubid, 19.2) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishChar(pubid, "a") # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishComplex(pubid, 2.5 + -9.8j) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishVector(pubid, [1.3, 2.9]) # @test_throws h.HELICSErrorInvalidFunctionCall with pt.raises(h.HelicsException): h.helicsPublicationPublishNamedPoint(pubid, "hello world", 2.0) destroyFederate(vFed1, fedinfo) destroyBroker(broker)
def test_iteration_async_test(): broker = createBroker(1) vFed1, fedinfo1 = createValueFederate(1, "fed0") vFed2, fedinfo2 = createValueFederate(1, "fed1") # register the publications pub1 = h.helicsFederateRegisterGlobalPublication(vFed1, "pub1", h.HELICS_DATA_TYPE_INT) sub1 = h.helicsFederateRegisterSubscription(vFed2, "pub1") pub2 = h.helicsFederateRegisterGlobalPublication(vFed2, "pub2", h.HELICS_DATA_TYPE_INT) sub2 = h.helicsFederateRegisterSubscription(vFed1, "pub2") h.helicsFederateSetTimeProperty(vFed1, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) h.helicsFederateSetTimeProperty(vFed2, h.HELICS_PROPERTY_TIME_PERIOD, 1.0) # vFed1->setLoggingLevel(5) # vFed2->setLoggingLevel(5) h.helicsFederateEnterInitializingModeAsync(vFed1) h.helicsFederateEnterInitializingMode(vFed2) h.helicsFederateEnterInitializingModeComplete(vFed1) c1 = 0 c2 = 0 h.helicsPublicationPublishInteger(pub1, c1) h.helicsPublicationPublishInteger(pub2, c2) h.helicsFederateEnterExecutingModeAsync(vFed1) h.helicsFederateEnterExecutingMode(vFed2) h.helicsFederateEnterExecutingModeComplete(vFed1) while c1 <= 10: h.helicsInputGetInteger(sub1), c1 h.helicsInputGetInteger(sub2), c2 c1 += 1 c2 += 1 if c1 <= 10: h.helicsPublicationPublishInteger(pub1, c1) h.helicsPublicationPublishInteger(pub2, c2) h.helicsFederateRequestTimeIterativeAsync( vFed1, 1.0, h.HELICS_ITERATION_REQUEST_ITERATE_IF_NEEDED) grantedTime, state = h.helicsFederateRequestTimeIterative( vFed2, 1.0, h.HELICS_ITERATION_REQUEST_ITERATE_IF_NEEDED) if c1 <= 10: # assert state == h.HELICS_ITERATION_RESULT_ITERATING assert grantedTime == 0.0 else: # assert state == h.HELICS_ITERATION_RESULT_NEXT_STEP assert grantedTime == 1.0 grantedTime, state = h.helicsFederateRequestTimeIterativeComplete( vFed1) if c1 <= 10: # assert state == h.HELICS_ITERATION_RESULT_ITERATING assert grantedTime == 0.0 # assert state == h.HELICS_ITERATION_RESULT_NEXT_STEP # assert grantedTime == 1.0 destroyFederate(vFed1, fedinfo1) destroyFederate(vFed2, fedinfo2) destroyBroker(broker)