Exemplo n.º 1
0
  static void TestMethodsNormalCases()
    {
    //create and initialize test objects
    MyNavigationDataSourceTest::Pointer myFilter = MyNavigationDataSourceTest::New();
    myFilter->CreateOutput();
    mitk::NavigationData::PositionType initialPos;
    mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
    mitk::NavigationData::OrientationType initialOri(0.1, 0.2, 0.3, 0.4);
    mitk::ScalarType initialError(22.22);
    bool initialValid(true);
    mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
    nd1->SetPosition(initialPos);
    nd1->SetOrientation(initialOri);
    nd1->SetPositionAccuracy(initialError);
    nd1->SetDataValid(initialValid);

    //test method graft
    MITK_TEST_OUTPUT(<< "testing Graftoutput()");
    myFilter->GraftOutput(nd1);
    mitk::NavigationData::Pointer out = myFilter->GetOutput();
    MITK_TEST_CONDITION(out.GetPointer() != nd1.GetPointer(), "testing if output is same object as source of graft");
    MITK_TEST_CONDITION( mitk::Equal(out->GetPosition(), nd1->GetPosition()) &&
                         mitk::Equal(out->GetOrientation(), nd1->GetOrientation()) &&
                         (out->GetCovErrorMatrix() == nd1->GetCovErrorMatrix()) &&
                         (out->IsDataValid() == nd1->IsDataValid()) &&
                         mitk::Equal(out->GetTimeStamp(), nd1->GetTimeStamp()), "testing if content of output is equal to input of Graft");

    //test method GetParameters()
    mitk::PropertyList::ConstPointer list = myFilter->GetParameters();
    MITK_TEST_CONDITION(list.IsNotNull(), "testing GetParameters()");
    }
Exemplo n.º 2
0
 static void TestMicroserviceRegister()
   {
   MyNavigationDataSourceTest::Pointer myFilter = MyNavigationDataSourceTest::New();
   myFilter->CreateOutput();
   mitk::NavigationData::PositionType initialPos;
   mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
   mitk::NavigationData::OrientationType initialOri(0.1, 0.2, 0.3, 0.4);
   mitk::ScalarType initialError(22.22);
   bool initialValid(true);
   mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
   nd1->SetPosition(initialPos);
   nd1->SetOrientation(initialOri);
   nd1->SetPositionAccuracy(initialError);
   nd1->SetDataValid(initialValid);
   myFilter->RegisterAsMicroservice();
   MITK_TEST_CONDITION(myFilter->GetMicroserviceID()!="","Testing if microservice was registered successfully.");
   }
/**Documentation
 *  test for the class "NavigationDataToNavigationDataFilter".
 */
int mitkNavigationDataToNavigationDataFilterTest(int /* argc */, char* /*argv*/[])
{
  MITK_TEST_BEGIN("NavigationDataToNavigationDataFilter")

  // let's create an object of our class
  mitk::NavigationDataToNavigationDataFilter::Pointer myFilter = NavigationDataToNavigationDataFilterTestClass::New().GetPointer(); // create testing subclass, but treat it like the real NavigationDataToNavigationDataFilter

  MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");

  /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
  mitk::NavigationData::PositionType initialPos;
  mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
  mitk::NavigationData::OrientationType initialOri(0.1, 0.2, 0.3, 0.4);
  mitk::ScalarType initialError(22.22);
  bool initialValid(true);
  mitk::NavigationData::Pointer nd0 = mitk::NavigationData::New();
  nd0->SetPosition(initialPos);
  nd0->SetOrientation(initialOri);
  nd0->SetPositionAccuracy(initialError);
  nd0->SetDataValid(initialValid);
  nd0->SetName("testName");

  MITK_TEST_CONDITION(myFilter->GetOutput() == NULL, "testing GetOutput()");

  MITK_TEST_CONDITION(myFilter->GetInput() == NULL, "testing GetInput() without SetInput()");
  MITK_TEST_CONDITION(myFilter->GetInput(0) == NULL, "testing GetInput(0) without SetInput()");

  myFilter->SetInput(nd0);
  MITK_TEST_CONDITION(myFilter->GetInput() == nd0, "testing Set-/GetInput()");
  MITK_TEST_CONDITION(myFilter->GetInput(0) == nd0, "testing Set-/GetInput(0)");
  MITK_TEST_CONDITION(myFilter->GetOutput() != NULL, "testing GetOutput() after SetInput()");
  MITK_TEST_CONDITION(myFilter->GetOutput(0) != NULL, "testing GetOutput() after SetInput()");
  MITK_TEST_CONDITION(myFilter->GetOutput(0) != nd0, "testing GetOutput() different object than input");

  // check getInput() string input
  MITK_TEST_CONDITION(myFilter->GetInput("invalidName") == NULL, "testing GetInput(string) invalid string");
  MITK_TEST_CONDITION(myFilter->GetInput("testName") == nd0, "testing GetInput(string) valid string");

  // check getInputIndex() string input
  bool throwsException = false;
  try {
    myFilter->GetInputIndex("invalidName");
  }
  catch(std::invalid_argument e) {
    throwsException = true;
  }
  MITK_TEST_CONDITION_REQUIRED(throwsException, "testing GetInputIndex(string) invalid string");

  MITK_TEST_CONDITION(myFilter->GetInputIndex("testName") == 0, "testing GetInputIndex(string) valid string");


  mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
  nd1->Graft(nd0);
  nd1->SetDataValid(false);
  myFilter->SetInput(1, nd1);
  MITK_TEST_CONDITION(myFilter->GetInput(1) == nd1, "testing Set-/GetInput(1)");
  MITK_TEST_CONDITION(myFilter->GetInput(0) == nd0, "testing Set-/GetInput(0) again");
  MITK_TEST_CONDITION(myFilter->GetOutput(1) != NULL, "testing GetOutput() after SetInput()");
  MITK_TEST_CONDITION(myFilter->GetOutput(0) != myFilter->GetOutput(1), "testing GetOutput(0) different object than GetOutput(1)");

  myFilter->SetInput(10, nd1);
  MITK_TEST_CONDITION(myFilter->GetNumberOfInputs() == 11, "testing SetInput(10) produces 11 outputs");
  MITK_TEST_CONDITION(myFilter->GetInput(10) == nd1, "testing Set-/GetInput(10)");

  myFilter->SetInput(10, NULL);
  MITK_TEST_CONDITION(myFilter->GetNumberOfInputs() == 10, "testing SetInput(10, NULL) removes output with index 10");

  myFilter->SetInput(1, NULL);
  MITK_TEST_CONDITION(myFilter->GetNumberOfInputs() == 10, "testing SetInput(1, NULL) does not change number of outputs");

  // always end with this!
  MITK_TEST_END();
}
/**Documentation
 *  test for the class "NavigationDataToMessageFilter".
 */
int mitkNavigationDataToMessageFilterTest(int /* argc */, char* /*argv*/[])
{
  MITK_TEST_BEGIN("NavigationDataToMessageFilter");
  /* first tests with one input */
  {
    // let's create an object of our class
    mitk::NavigationDataToMessageFilter::Pointer myFilter = mitk::NavigationDataToMessageFilter::New();

    // first test: did this work?
    // using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since
    // it makes no sense to continue without an object.
    MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");

    /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
    mitk::NavigationData::PositionType initialPos;
    mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
    mitk::NavigationData::OrientationType initialOri(1.0, 2.0, 3.0, 4.0);

    mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
    nd1->SetPosition(initialPos);
    nd1->SetOrientation(initialOri);
    nd1->SetPositionAccuracy(11.111);
    nd1->SetTimeStamp(64.46);
    nd1->SetDataValid(true);

    myFilter->SetInput(nd1);
    MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "testing Set-/GetInput()");

    mitk::NavigationData* output = myFilter->GetOutput();
    MITK_TEST_CONDITION_REQUIRED(output != NULL, "Testing GetOutput()");


    /* register message receiver */
    MessageReceiverClass answers(1);
    myFilter->AddPositionChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::PositionType, unsigned int>(&answers, &MessageReceiverClass::OnPositionChanged));
    myFilter->AddOrientationChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::OrientationType, unsigned int>(&answers, &MessageReceiverClass::OnOrientationChanged));
    myFilter->AddErrorChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::CovarianceMatrixType, unsigned int>(&answers, &MessageReceiverClass::OnErrorChanged));
    myFilter->AddTimeStampChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::TimeStampType, unsigned int>(&answers, &MessageReceiverClass::OnTimeStampChanged));
    myFilter->AddDataValidChangedListener(mitk::MessageDelegate2<MessageReceiverClass, bool, unsigned int>(&answers, &MessageReceiverClass::OnDataValidChanged));


    output->Update(); // execute filter
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetPosition(), nd1->GetPosition()), "Testing PositionChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetOrientation(), nd1->GetOrientation()), "Testing OrientationChanged message");
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->GetCovErrorMatrix() == nd1->GetCovErrorMatrix(), "Testing ErrorChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing TimeStampChanged message");
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd1->IsDataValid(), "Testing PositionChanged message");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 5, "Correct number of messages send?");

    /* change one input parameter */
    nd1->SetDataValid(false);
    output->Update(); // re-execute filter
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd1->IsDataValid(), "Testing PositionChanged message");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 6, "only necessary messages send?");  // only datavalid message re-send

    /* changing two input parameters */
    mitk::FillVector3D(initialPos, 11.0, 21.0, 31.0);
    nd1->SetPosition(initialPos); // change only one parameter
    nd1->SetTimeStamp(55.55); // change only one parameter
    output->Update(); // re-execute filter
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetPosition(), nd1->GetPosition()), "Testing PositionChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing TimeStampChanged message");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 8, "only necessary messages send?");  // only 2 new messages send

    /* try to add a second input */
    //MITK_TEST_OUTPUT_NO_ENDL( << "Exception on adding second input? --> ");
    //mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
    //MITK_TEST_FOR_EXCEPTION(std::invalid_argument, myFilter->SetInput(1, nd2));

  }
  /* now test with multiple inputs */
  {
    MITK_TEST_OUTPUT( << "Now, perform tests with multiple inputs");

    mitk::NavigationDataToMessageFilter::Pointer myFilter = mitk::NavigationDataToMessageFilter::New();

    /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
    mitk::NavigationData::PositionType initialPos;
    mitk::FillVector3D(initialPos, 1.0, 1.0, 1.0);
    mitk::NavigationData::OrientationType initialOri(1.0, 1.0, 1.0, 1.0);

    mitk::NavigationData::Pointer nd0 = mitk::NavigationData::New();
    nd0->SetPosition(initialPos);
    nd0->SetOrientation(initialOri);
    nd0->SetPositionAccuracy(11.111);
    nd0->SetTimeStamp(64.46);
    nd0->SetDataValid(true);

    mitk::FillVector3D(initialPos, 2.0, 2.0, 2.0);
    mitk::NavigationData::OrientationType initialOri2(1.0, 1.0, 1.0, 1.0);
    mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
    nd1->SetPosition(initialPos);
    nd1->SetOrientation(initialOri2);
    nd1->SetPositionAccuracy(22.222);
    nd1->SetTimeStamp(222.2);
    nd1->SetDataValid(true);

    myFilter->SetInput(0, nd0);
    myFilter->SetInput(1, nd1);
    MITK_TEST_CONDITION(myFilter->GetInput(0) == nd0, "testing Set-/GetInput(0)");
    MITK_TEST_CONDITION(myFilter->GetInput(1) == nd1, "testing Set-/GetInput(1)");

    mitk::NavigationData* output0 = myFilter->GetOutput(0);
    mitk::NavigationData* output1 = myFilter->GetOutput(1);
    MITK_TEST_CONDITION_REQUIRED(output0 != NULL, "Testing GetOutput(0)");
    MITK_TEST_CONDITION_REQUIRED(output1 != NULL, "Testing GetOutput(1)");

    /* register message receiver */
    MessageReceiverClass answers(2);
    myFilter->AddPositionChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::PositionType, unsigned int>(&answers, &MessageReceiverClass::OnPositionChanged));
    myFilter->AddOrientationChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::OrientationType, unsigned int>(&answers, &MessageReceiverClass::OnOrientationChanged));
    myFilter->AddErrorChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::CovarianceMatrixType, unsigned int>(&answers, &MessageReceiverClass::OnErrorChanged));
    myFilter->AddTimeStampChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::TimeStampType, unsigned int>(&answers, &MessageReceiverClass::OnTimeStampChanged));
    myFilter->AddDataValidChangedListener(mitk::MessageDelegate2<MessageReceiverClass, bool, unsigned int>(&answers, &MessageReceiverClass::OnDataValidChanged));

    output0->Update(); // execute filter. This should send messages for both inputs
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetPosition(), nd0->GetPosition()), "Testing PositionChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetOrientation(), nd0->GetOrientation()), "Testing OrientationChanged message");
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->GetCovErrorMatrix() == nd0->GetCovErrorMatrix(), "Testing ErrorChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetTimeStamp(), nd0->GetTimeStamp()), "Testing TimeStampChanged message");
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd0->IsDataValid(), "Testing PositionChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetPosition(), nd1->GetPosition()), "Testing PositionChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetOrientation(), nd1->GetOrientation()), "Testing OrientationChanged message");
    MITK_TEST_CONDITION( answers.m_ReceivedData[1]->GetCovErrorMatrix() == nd1->GetCovErrorMatrix(), "Testing ErrorChanged message");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing TimeStampChanged message");
    MITK_TEST_CONDITION( answers.m_ReceivedData[1]->IsDataValid() == nd1->IsDataValid(), "Testing PositionChanged message");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 10, "Correct number of messages send?");
    MITK_TEST_OUTPUT( << "answers.m_MessagesReceived = " << answers.m_MessagesReceived);
    /* change one input parameter */
    nd0->SetDataValid(false);
    output0->Update(); // re-execute filter
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd0->IsDataValid(), "Testing PositionChanged message for input 0");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 11, "only necessary messages send?");  // only datavalid message for input 0 re-send

    /* remove one listener and check that message is not send */
    myFilter->RemoveTimeStampChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::TimeStampType, unsigned int>(&answers, &MessageReceiverClass::OnTimeStampChanged));
    mitk::NavigationData::TimeStampType oldValue = nd1->GetTimeStamp();
    nd1->SetTimeStamp(999.9);
    myFilter->Update();
    MITK_TEST_CONDITION( ! mitk::Equal(answers.m_ReceivedData[1]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing if TimeStamp message is _not_ send after RemoveListener (!= new value)");
    MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetTimeStamp(), oldValue), "Testing if TimeStamp message is _not_ send after RemoveListener (== old value)");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 11, "no new messages send?");  // no new message send?
    /* other messages are still send? */
    nd1->SetDataValid(false);
    myFilter->Update();
    MITK_TEST_CONDITION( answers.m_ReceivedData[1]->IsDataValid() == nd1->IsDataValid(), "Other messages still send? ->Testing PositionChanged message for input 1 again");
    MITK_TEST_CONDITION( answers.m_MessagesReceived == 12, "only necessary messages send?");  // only DataValid message for input 1 re-send
    /* check if other output still has its old value */
    MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd0->IsDataValid(), "Testing PositionChanged message for input 0");
  }
  // The end
  MITK_TEST_END();
}
Exemplo n.º 5
0
/**Documentation
 *  test for the class "NavigationDataLandmarkTransformFilter".
 */
int mitkNavigationDataLandmarkTransformFilterTest(int /* argc */, char* /*argv*/[])
{

    MITK_TEST_BEGIN("NavigationDataLandmarkTransformFilter")

    // let's create an object of our class
    mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter = mitk::NavigationDataLandmarkTransformFilter::New();

    // first test: did this work?
    // using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since
    // it makes no sense to continue without an object.
    MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");

    /*create helper objects: source and target pointSets for landmark transform*/
    mitk::Point3D sPoint1, sPoint2, sPoint3, tPoint1, tPoint2, tPoint3;
    mitk::FillVector3D(sPoint1, 1.1, 1.1, 1.1);
    mitk::FillVector3D(sPoint2, 2.2, 2.2, 2.2);
    mitk::FillVector3D(sPoint3, 3.3, 3.3, 3.3);

    mitk::FillVector3D(tPoint1, 2.1, 2.1, 2.1);
    mitk::FillVector3D(tPoint2, 3.2, 3.2, 3.2);
    mitk::FillVector3D(tPoint3, 4.3, 4.3, 4.3);

    mitk::PointSet::Pointer sourcePoints = mitk::PointSet::New();
    mitk::PointSet::Pointer targetPoints = mitk::PointSet::New();

    sourcePoints->SetPoint(0,sPoint1);
    sourcePoints->SetPoint(1,sPoint2);
    sourcePoints->SetPoint(2,sPoint3);

    targetPoints->SetPoint(0,tPoint1);
    targetPoints->SetPoint(1,tPoint2);
    targetPoints->SetPoint(2,tPoint3);

    /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
    mitk::NavigationData::PositionType initialPos1,initialPos2, resultPos1,resultPos2;
    mitk::FillVector3D(initialPos1, 1.1, 1.1, 1.1);
    mitk::FillVector3D(initialPos2, 22.2,22.2, 22.2);
    mitk::FillVector3D(resultPos1, 2.1, 2.1, 2.1);
    mitk::FillVector3D(resultPos2, 23.2, 23.2, 23.2);
    mitk::NavigationData::OrientationType initialOri(0.1, 0.1, 0.1, 0.1);
    mitk::ScalarType initialError(0.0);
    bool initialValid(true);

    mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
    nd1->SetPosition(initialPos1);
    nd1->SetOrientation(initialOri);
    nd1->SetPositionAccuracy(initialError);
    nd1->SetDataValid(initialValid);

    mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
    nd2->SetPosition(initialPos2);
    nd2->SetOrientation(initialOri);
    nd2->SetPositionAccuracy(initialError);
    nd2->SetDataValid(initialValid);


    myFilter->SetInput(0,nd1);
    MITK_TEST_CONDITION(myFilter->GetInput(0) == nd1, "Testing Set-/GetInput() ND1");

    mitk::NavigationData* output1 = myFilter->GetOutput(0);
    MITK_TEST_CONDITION_REQUIRED(output1 != NULL, "Testing GetOutput() ND1");

    MITK_TEST_CONDITION(myFilter->IsInitialized() == false, "Testing IsInitialized() before setting source points");

    myFilter->SetSourceLandmarks(sourcePoints);
    MITK_TEST_CONDITION(myFilter->IsInitialized() == false, "Testing IsInitialized() after setting source points and before setting target points");

    mitk::PointSet::Pointer zeroTargetPoints = mitk::PointSet::New();

    MITK_TEST_FOR_EXCEPTION(itk::ExceptionObject, myFilter->SetTargetLandmarks(zeroTargetPoints));
    MITK_TEST_CONDITION(myFilter->IsInitialized() == false, "Testing IsInitialized() after setting target pointset with insufficient points");

    myFilter->SetTargetLandmarks(targetPoints);
    MITK_TEST_CONDITION(myFilter->IsInitialized() == true, "Testing IsInitialized() after setting source& target points");

    //------------------------landmark transform should be initialized at this point------------------------
    output1->Update();
    MITK_TEST_CONDITION_REQUIRED(
        mitk::Equal(output1->GetPosition(),  resultPos1),
        "Testing ND1 position correctly transformed");


    //------------------------add another ND------------------------
    myFilter->SetInput(1,nd2);
    MITK_TEST_CONDITION(myFilter->GetInput(1) == nd2, "Testing Set-/GetInput() ND2");

    mitk::NavigationData* output2 = myFilter->GetOutput(1);
    MITK_TEST_CONDITION_REQUIRED(output2 != NULL, "Testing GetOutput() ND2");

    //------------------------update output1 but check result2------------------------
    output1->Update();
    MITK_TEST_CONDITION_REQUIRED(
        mitk::Equal(output2->GetPosition(),  resultPos2),
        "Testing ND2 position correctly transformed");

    //------------------------update ND on slot 1------------------------
    mitk::FillVector3D(initialPos2, 222.22, 222.22, 222.22);
    mitk::FillVector3D(resultPos2, 223.22, 223.22, 223.22);
    nd2->SetPosition(initialPos2);
    myFilter->SetInput(1,nd2);
    MITK_TEST_CONDITION(myFilter->GetInput(1) == nd2, "Testing Set-/GetInput() ND2 after updating value");

    output2 = myFilter->GetOutput(1);
    MITK_TEST_CONDITION_REQUIRED(output2 != NULL, "Testing GetOutput() ND2 after updating value");

    //------------------------update output2 and check result2------------------------
    output2->Update();
    MITK_TEST_CONDITION(
        mitk::Equal(output2->GetPosition(),  resultPos2),
        "Testing ND2 position correctly transformed after updating value");


    //------------------------change target PointSet------------------------
    mitk::FillVector3D(tPoint1, 3.1, 3.1, 3.1);
    mitk::FillVector3D(tPoint2, 4.2, 4.2, 4.2);
    mitk::FillVector3D(tPoint3, 5.3, 5.3, 5.3);
    mitk::FillVector3D(resultPos1, 3.1 ,3.1 ,3.1);
    mitk::FillVector3D(resultPos2, 224.22, 224.22, 224.22);


    targetPoints->SetPoint(0,tPoint1);
    targetPoints->SetPoint(1,tPoint2);
    targetPoints->SetPoint(2,tPoint3);

    myFilter->SetTargetLandmarks(targetPoints);

    output1->Update();

    MITK_TEST_CONDITION(
        mitk::Equal(output1->GetPosition(),  resultPos1),
        "Testing ND1 position correctly transformed after targetPointSet changed");

    MITK_TEST_CONDITION(
        mitk::Equal(output2->GetPosition(),  resultPos2),
        "Testing ND2 position correctly transformed after targetPointSet changed");


    //------------------------change source PointSet------------------------
    mitk::FillVector3D(sPoint1, 0.1, 0.1, 0.1);
    mitk::FillVector3D(sPoint2, 1.2, 1.2, 1.2);
    mitk::FillVector3D(sPoint3, 2.3, 2.3, 2.3);
    mitk::FillVector3D(resultPos1, 4.1 ,4.1 ,4.1);
    mitk::FillVector3D(resultPos2, 225.22, 225.22, 225.22);


    sourcePoints->SetPoint(0,sPoint1);
    sourcePoints->SetPoint(1,sPoint2);
    sourcePoints->SetPoint(2,sPoint3);

    myFilter->SetSourceLandmarks(sourcePoints);

    output1->Update();

    MITK_TEST_CONDITION(
        mitk::Equal(output1->GetPosition(),  resultPos1),
        "Testing ND1 position correctly transformed after sourcePointSet changed");

    MITK_TEST_CONDITION(
        mitk::Equal(output2->GetPosition(),  resultPos2),
        "Testing ND2 position correctly transformed after sourcePointSet changed");

    //--------------------- Test ICP initialization --------------------------
    {
        mitk::PointSet::Pointer sourcePoints = mitk::PointSet::New();
        mitk::Point3D s1, s2, s3, s4, s5, s6;
        mitk::FillVector3D(s1, 1.1, 1.1, 1.1);
        mitk::FillVector3D(s2, 2.2, 2.2, 2.2);
        mitk::FillVector3D(s3, 3.3, 3.3, 3.3);
        mitk::FillVector3D(s4, 4.4, 4.4, 4.4);
        mitk::FillVector3D(s5, 5.5, 5.5, 5.5);
        mitk::FillVector3D(s6, 6.6, 6.6, 6.6);
        sourcePoints->SetPoint(1, s4);  // use random source point order
        sourcePoints->SetPoint(2, s6);
        sourcePoints->SetPoint(3, s3);
        sourcePoints->SetPoint(4, s1);
        sourcePoints->SetPoint(5, s2);
        sourcePoints->SetPoint(6, s5);

        mitk::PointSet::Pointer targetPoints = mitk::PointSet::New();
        mitk::Point3D t1, t2, t3, t4, t5, t6;
        mitk::FillVector3D(t1, 2.1, 2.1, 102.1);  // ==> targets have offset [1, 1, 101]
        mitk::FillVector3D(t2, 3.2, 3.2, 103.2);
        mitk::FillVector3D(t3, 4.3, 4.3, 104.3);
        mitk::FillVector3D(t4, 5.4, 5.4, 105.4);
        mitk::FillVector3D(t5, 6.5, 6.5, 106.5);
        mitk::FillVector3D(t6, 7.6, 7.6, 107.6);
        targetPoints->SetPoint(1, t1);
        targetPoints->SetPoint(2, t2);
        targetPoints->SetPoint(3, t3);
        targetPoints->SetPoint(4, t4);
        targetPoints->SetPoint(5, t5);
        targetPoints->SetPoint(6, t6);

        mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter = mitk::NavigationDataLandmarkTransformFilter::New();
        myFilter->UseICPInitializationOn();
        myFilter->SetSourceLandmarks(sourcePoints);
        myFilter->SetTargetLandmarks(targetPoints);  // errors would raise exceptions

        // prepare input
        mitk::NavigationData::PositionType initialPos1, resultPos1;
        mitk::FillVector3D(initialPos1, 1.1, 1.1, 1.1);
        mitk::FillVector3D(resultPos1, 2.1, 2.1, 102.1);
        mitk::NavigationData::OrientationType initialOri(0.1, 0.1, 0.1, 0.1);
        mitk::ScalarType initialError(0.0);
        bool initialValid(true);
        mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
        nd1->SetPosition(initialPos1);
        nd1->SetOrientation(initialOri);
        nd1->SetPositionAccuracy(initialError);
        nd1->SetDataValid(initialValid);

        myFilter->SetInput(0, nd1);
        mitk::NavigationData::Pointer output = myFilter->GetOutput(0);

        output->Update();

        //MITK_TEST_CONDITION(mitk::Equal(output->GetPosition(),  resultPos1), "Testing ND1 position correctly transformed after ICP initialization");
    }

    //------------------------catch exception --> source points < 3------------------------
    mitk::NavigationDataLandmarkTransformFilter::Pointer myFilter2 = mitk::NavigationDataLandmarkTransformFilter::New();
    MITK_TEST_CONDITION_REQUIRED(myFilter2.IsNotNull(),"Testing instantiation for second filter");

    mitk::PointSet::Pointer sourcePoints2 = mitk::PointSet::New();
    MITK_TEST_FOR_EXCEPTION(std::exception, myFilter2->SetSourceLandmarks(sourcePoints2););