/** * Test the output a plan version of the segment method. * TODO: Need to be more tough. */ void TestSegment::testToTopologicalOrderedStruct() { Segment* seg = Segment::CreateWithEndTime(0, 20000, NULL); /* The following graph struct is tested. * ->1-3-4-5-> * / \ * ->2 6-> */ Token* tok1 = Token::CreateWithEndTime(0, 0, seg); Token* tok2 = Token::CreateWithEndTime(0, 0, seg); Token* tok3 = Token::CreateWithEndTime(0, 0, seg); Token* tok4 = Token::CreateWithEndTime(0, 0, seg); Token* tok5 = Token::CreateWithEndTime(0, 0, seg); Token* tok6 = Token::CreateWithEndTime(0, 0, seg); seg->AddFirstToken(tok1); seg->AddFirstToken(tok2); tok1->AddNextToken(tok3); tok2->AddNextToken(tok4); tok3->AddPrecToken(tok1); tok3->AddNextToken(tok4); tok4->AddPrecToken(tok2); tok4->AddPrecToken(tok3); tok4->AddNextToken(tok5); tok4->AddNextToken(tok6); tok5->AddPrecToken(tok4); tok6->AddPrecToken(tok4); seg->AddLastToken(tok5); seg->AddLastToken(tok6); vector<Token*> topo_seg = seg->ToTopologicalOrderedStruct(); // the size is suppose to be +1 (empty token at first) assert(topo_seg.size() == 6); //TODO put some more here }
void AlignmentTest::TestInsertions() { Alignment* ali; SegmentsGroup* sg; std::size_t testIndex = 2; // simple insertion, one segment ali = GetAlignmentFor(testIndex, &sg); Segment* ref = sg->GetReference(0)[0]; Segment* hyp = sg->GetHypothesis(0)[0]; vector< Token* > refs = ref->ToTopologicalOrderedStruct(); vector< Token* > hyps = hyp->ToTopologicalOrderedStruct(); cout << "Single Insertion tests:" << endl; cout << "\tCheck speech and segment..."; cout.flush(); Speech* refSpeech = ref->GetParentSpeech(); AlignedSpeech* asp = ali->GetOrCreateAlignedSpeechFor(refSpeech, false); assert(refSpeech == asp->GetReferenceSpeech()); AlignedSegment* asg = asp->GetOrCreateAlignedSegmentFor(ref, false); assert(ref == asg->GetReferenceSegment()); assert(asg->GetTokenAlignmentCount() == 3); cout << " OK." << endl; cout << "\tCheck tokens..."; cout.flush(); TokenAlignment* ta = asg->GetTokenAlignmentAt(0); assert(ta->GetReferenceToken() == refs[0]); assert(ta->GetTokenFor("hyp") == hyps[0]); ta = asg->GetTokenAlignmentAt(1); assert(ta->GetReferenceToken() == NULL); assert(ta->GetTokenFor("hyp") == hyps[1]); ta = asg->GetTokenAlignmentAt(2); assert(ta->GetReferenceToken() == refs[1]); assert(ta->GetTokenFor("hyp") == hyps[2]); cout << " OK." << endl; testIndex = 4; // only insertion, one segment ali = GetAlignmentFor(testIndex, &sg); ref = sg->GetReference(0)[0]; hyp = sg->GetHypothesis(0)[0]; refs = ref->ToTopologicalOrderedStruct(); hyps = hyp->ToTopologicalOrderedStruct(); cout << "Only Insertion tests:" << endl; cout << "\tCheck speech and segment..."; cout.flush(); refSpeech = ref->GetParentSpeech(); asp = ali->GetOrCreateAlignedSpeechFor(refSpeech, false); assert(refSpeech == asp->GetReferenceSpeech()); asg = asp->GetOrCreateAlignedSegmentFor(ref, false); assert(ref == asg->GetReferenceSegment()); assert(asg->GetTokenAlignmentCount() == 3); cout << " OK." << endl; cout << "\tCheck tokens..."; cout.flush(); ta = asg->GetTokenAlignmentAt(0); assert(ta->GetReferenceToken() == NULL); assert(ta->GetTokenFor("hyp") == hyps[0]); ta = asg->GetTokenAlignmentAt(1); assert(ta->GetReferenceToken() == NULL); assert(ta->GetTokenFor("hyp") == hyps[1]); ta = asg->GetTokenAlignmentAt(2); assert(ta->GetReferenceToken() == NULL); assert(ta->GetTokenFor("hyp") == hyps[2]); cout << " OK." << endl; delete ali; delete sg; }