             reads = argv[++i];
         else if (strcmp( argv[i], "-index" ) == 0)
             index = argv[++i];
+        else if (strcmp( argv[i], "-tests" ) == 0)
+        {
+            const std::string tests_string( argv[++i] );
+
+            char temp[256];
+            const char* begin = tests_string.c_str();
+            const char* end   = begin;
+
+            TEST_MASK = 0u;
+
+            while (1)
+            {
+                while (*end != ':' && *end != '\0')
+                {
+                    temp[end - begin] = *end;
+                    end++;
+                }
+
+                temp[end - begin] = '\0';
+
+                if (strcmp( temp, "qgram" ) == 0)
+                    TEST_MASK |= QGRAM_INDEX;
+                else if (strcmp( temp, "qgram-set" ) == 0)
+                    TEST_MASK |= QGRAM_SET_INDEX;
+                else if (strcmp( temp, "qgroup" ) == 0)
+                    TEST_MASK |= QGROUP_INDEX;
+
+                if (*end == '\0')
+                    break;
+
+                ++end; begin = end;
+            }
+        }
     }
 
     log_info(stderr, "q-gram test... started\n");


        log_visible(stderr, "  testing q-gram index... done\n");
        const float genome_ratio = float(genome_len)/float(stats.queries);
        log_info(stderr, "    sorted throughput: %.2f M reads/s\n", 1.0e-6f * float(n_strings)  / (stats.sorted_time * genome_ratio) );
        log_info(stderr, "    sorted throughput: %.2f M bases/s\n", 1.0e-6f * float(string_len) / (stats.sorted_time * genome_ratio) );
        log_info(stderr, "    filter throughput: %.2f M reads/s\n", 1.0e-6f * float(n_strings)  / (stats.filter_time * genome_ratio) );
        log_info(stderr, "    filter throughput: %.2f M bases/s\n", 1.0e-6f * float(string_len) / (stats.filter_time * genome_ratio) );
    }

    // test q-gram set-index
    {
        log_visible(stderr, "  testing q-gram set-index... started\n");



        log_visible(stderr, "  testing q-gram set-index... done\n");
        const float genome_ratio = float(genome_len)/float(stats.queries);
        log_info(stderr, "    sorted throughput: %6.2f M reads/s\n", 1.0e-6f * float(n_strings)  / (stats.sorted_time * genome_ratio) );
        log_info(stderr, "    sorted throughput: %6.2f M bases/s\n", 1.0e-6f * float(string_len) / (stats.sorted_time * genome_ratio) );
        log_info(stderr, "    filter throughput: %6.2f M reads/s\n", 1.0e-6f * float(n_strings)  / (stats.filter_time * genome_ratio) );
        log_info(stderr, "    filter throughput: %6.2f M bases/s\n", 1.0e-6f * float(string_len) / (stats.filter_time * genome_ratio) );
    }

    // test q-group index
    if (TEST_MASK & QGROUP_INDEX)
    {
        log_visible(stderr, "  testing q-group index... started\n");

