From 4510c58d485b497978dbce4bbd4d310318e35190 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rajmund=20Hru=C5=A1ka?= <rajmund.hruska@gmail.com>
Date: Mon, 4 May 2020 15:59:06 +0200
Subject: [PATCH] algo: covers: Add more extensive tests of approximate
 enhanced covers

---
 ...proximateEnhancedCoversComputationTest.cpp | 82 +++++++++++++------
 1 file changed, 56 insertions(+), 26 deletions(-)

diff --git a/alib2algo/test-src/stringology/cover/ApproximateEnhancedCoversComputationTest.cpp b/alib2algo/test-src/stringology/cover/ApproximateEnhancedCoversComputationTest.cpp
index 23deeccda4..f1d2dafce7 100644
--- a/alib2algo/test-src/stringology/cover/ApproximateEnhancedCoversComputationTest.cpp
+++ b/alib2algo/test-src/stringology/cover/ApproximateEnhancedCoversComputationTest.cpp
@@ -10,7 +10,7 @@
 #include <stringology/cover/ApproximateEnhancedCoversComputation.h>
 
 TEST_CASE ( "Approximate Enhanced Covers", "[unit][stringology][cover]" ) {
-	SECTION ( "Test 1" ) {
+	SECTION ( "One simple enhanced cover" ) {
 		string::LinearString < char > pattern ( "abacaccababa" );
 		unsigned int k = 1;
 
@@ -24,53 +24,83 @@ TEST_CASE ( "Approximate Enhanced Covers", "[unit][stringology][cover]" ) {
 		CHECK ( result == refSet );
 	}
 
-	SECTION ( "Test 2" ) {
-		string::LinearString < char > pattern ( "" );
-		unsigned int k = 1;
+	SECTION ( "Multiple enhanced covers" ) {
+		string::LinearString < char > pattern ( "ababaccababa" );
+		unsigned int k = 2;
+
+		ext::set < string::LinearString < char > > refSet;
+		string::LinearString < char > a1 ( "aba" );
+		string::LinearString < char > a2 ( "ababa" );
+
+		refSet.insert ( a1 );
+		refSet.insert ( a2 );
 
 		ext::set < string::LinearString < char > > result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k );
 
-		CHECK ( result.empty ( ) );
+		CHECK ( result == refSet );
 	}
 
-	SECTION ( "Test 3" ) {
-		string::LinearString < char > pattern ( "abcd" );
-		unsigned int k = 1;
+	SECTION ( "Empty string" ) {
+		string::LinearString < char > pattern ( "" );
+		unsigned int k = 0;
 
-		ext::set < string::LinearString < char > > result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k );
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k ).empty ( ) );
 
-		CHECK ( result.empty ( ) );
+		k = 1;
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k ).empty ( ) );
+
+		k = 15;
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k ).empty ( ) );
+
+		k = -1;
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k ).empty ( ) );
 	}
 
-	SECTION ( "Test 4" ) {
-		string::LinearString < char > pattern ( "adesgvsade" );
-		unsigned int k = 4;
+	SECTION ( "k = 0 (enhanced covers)" ) {
+		unsigned int k = 0;
 
-		ext::set < string::LinearString < char > > result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k );
+		string::LinearString < char > pattern ( "x" );
 
-		CHECK ( result.empty ( ) );
-	}
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k ).empty ( ) );
 
-	SECTION ( "Test 5" ) {
-		string::LinearString < char > pattern ( "abcdefghabcd" );
-		unsigned int k = 3;
+		string::LinearString < char > pattern2 ( "ab" );
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern2, k ).empty ( ) );
 
+		string::LinearString < char > pattern3 ( "aa" );
+		string::LinearString < char > a1 ( "a" );
 		ext::set < string::LinearString < char > > refSet;
-		string::LinearString < char > a1 ( "abcd" );
-
 		refSet.insert ( a1 );
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern3, k ) == refSet );
 
-		ext::set < string::LinearString < char > > result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k );
+		string::LinearString < char > pattern4 ( "aba" );
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern4, k ) == refSet );
 
-		CHECK ( result == refSet );
+		string::LinearString < char > pattern5 ( "aaa" );
+		string::LinearString < char > a2 ( "aa" );
+		refSet.insert ( a2 );
+		CHECK ( stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern5, k ) == refSet );
 	}
 
-	SECTION ( "Test 6" ) {
-		string::LinearString < char > pattern ( "a" );
-		unsigned int k = 0;
+	SECTION ( "Different k" ) {
+		string::LinearString < char > pattern ( "adesgvsade" );
+		unsigned int k = 3;
 
 		ext::set < string::LinearString < char > > result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k );
 
 		CHECK ( result.empty ( ) );
+
+		k = 2;
+		ext::set < string::LinearString < char > > refSet;
+		string::LinearString < char > a1 ( "ade" );
+		refSet.insert ( a1 );
+
+		result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern, k );
+		CHECK ( result == refSet );
+
+		string::LinearString < char > pattern2 ( "abcd" );
+		k = 1;
+
+		result = stringology::cover::ApproximateEnhancedCoversComputation::compute ( pattern2, k );
+		CHECK ( result.empty ( ) );
 	}
 }
-- 
GitLab