Пример #1
0
/**
 * 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  
}
Пример #2
0
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;
}