You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2016/07/15 11:12:08 UTC

[16/22] lucy git commit: Move tests to separate directory

Move tests to separate directory


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/572d3564
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/572d3564
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/572d3564

Branch: refs/heads/master
Commit: 572d35647c881f0ba8a9b034f49240f0f7193c16
Parents: 2016986
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Jul 8 16:46:21 2016 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Fri Jul 8 16:46:21 2016 +0200

----------------------------------------------------------------------
 common/charmonizer.c                            |  15 +-
 common/charmonizer.main                         |  15 +-
 core/Lucy/Test.c                                | 161 ---
 core/Lucy/Test.cfh                              |  26 -
 core/Lucy/Test/Analysis/TestAnalyzer.c          |  69 --
 core/Lucy/Test/Analysis/TestAnalyzer.cfh        |  39 -
 core/Lucy/Test/Analysis/TestCaseFolder.c        |  73 --
 core/Lucy/Test/Analysis/TestCaseFolder.cfh      |  29 -
 core/Lucy/Test/Analysis/TestNormalizer.c        | 188 ----
 core/Lucy/Test/Analysis/TestNormalizer.cfh      |  29 -
 core/Lucy/Test/Analysis/TestPolyAnalyzer.c      | 179 ----
 core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh    |  29 -
 core/Lucy/Test/Analysis/TestRegexTokenizer.c    |  75 --
 core/Lucy/Test/Analysis/TestRegexTokenizer.cfh  |  29 -
 core/Lucy/Test/Analysis/TestSnowballStemmer.c   | 116 ---
 core/Lucy/Test/Analysis/TestSnowballStemmer.cfh |  29 -
 .../Lucy/Test/Analysis/TestSnowballStopFilter.c |  86 --
 .../Test/Analysis/TestSnowballStopFilter.cfh    |  29 -
 core/Lucy/Test/Analysis/TestStandardTokenizer.c | 140 ---
 .../Test/Analysis/TestStandardTokenizer.cfh     |  29 -
 core/Lucy/Test/Highlight/TestHeatMap.c          | 175 ----
 core/Lucy/Test/Highlight/TestHeatMap.cfh        |  29 -
 core/Lucy/Test/Highlight/TestHighlighter.c      | 446 ---------
 core/Lucy/Test/Highlight/TestHighlighter.cfh    |  29 -
 core/Lucy/Test/Index/TestDocWriter.c            |  37 -
 core/Lucy/Test/Index/TestDocWriter.cfh          |  29 -
 core/Lucy/Test/Index/TestHighlightWriter.c      |  37 -
 core/Lucy/Test/Index/TestHighlightWriter.cfh    |  29 -
 core/Lucy/Test/Index/TestIndexManager.c         |  63 --
 core/Lucy/Test/Index/TestIndexManager.cfh       |  28 -
 core/Lucy/Test/Index/TestPolyReader.c           |  53 -
 core/Lucy/Test/Index/TestPolyReader.cfh         |  28 -
 core/Lucy/Test/Index/TestPostingListWriter.c    |  36 -
 core/Lucy/Test/Index/TestPostingListWriter.cfh  |  29 -
 core/Lucy/Test/Index/TestSegWriter.c            |  37 -
 core/Lucy/Test/Index/TestSegWriter.cfh          |  29 -
 core/Lucy/Test/Index/TestSegment.c              | 169 ----
 core/Lucy/Test/Index/TestSegment.cfh            |  29 -
 core/Lucy/Test/Index/TestSnapshot.c             | 112 ---
 core/Lucy/Test/Index/TestSnapshot.cfh           |  29 -
 core/Lucy/Test/Index/TestSortWriter.c           | 323 ------
 core/Lucy/Test/Index/TestSortWriter.cfh         |  43 -
 core/Lucy/Test/Index/TestTermInfo.c             |  68 --
 core/Lucy/Test/Index/TestTermInfo.cfh           |  29 -
 core/Lucy/Test/Object/TestBitVector.c           | 453 ---------
 core/Lucy/Test/Object/TestBitVector.cfh         |  29 -
 core/Lucy/Test/Object/TestI32Array.c            |  73 --
 core/Lucy/Test/Object/TestI32Array.cfh          |  29 -
 core/Lucy/Test/Plan/TestArchitecture.c          |  50 -
 core/Lucy/Test/Plan/TestArchitecture.cfh        |  39 -
 core/Lucy/Test/Plan/TestBlobType.c              |  59 --
 core/Lucy/Test/Plan/TestBlobType.cfh            |  29 -
 core/Lucy/Test/Plan/TestFieldMisc.c             | 248 -----
 core/Lucy/Test/Plan/TestFieldMisc.cfh           |  29 -
 core/Lucy/Test/Plan/TestFieldType.c             | 107 --
 core/Lucy/Test/Plan/TestFieldType.cfh           |  33 -
 core/Lucy/Test/Plan/TestFullTextType.c          | 112 ---
 core/Lucy/Test/Plan/TestFullTextType.cfh        |  29 -
 core/Lucy/Test/Plan/TestNumericType.c           | 109 ---
 core/Lucy/Test/Plan/TestNumericType.cfh         |  29 -
 core/Lucy/Test/Search/TestLeafQuery.c           |  70 --
 core/Lucy/Test/Search/TestLeafQuery.cfh         |  29 -
 core/Lucy/Test/Search/TestMatchAllQuery.c       |  57 --
 core/Lucy/Test/Search/TestMatchAllQuery.cfh     |  29 -
 core/Lucy/Test/Search/TestNOTQuery.c            |  70 --
 core/Lucy/Test/Search/TestNOTQuery.cfh          |  29 -
 core/Lucy/Test/Search/TestNoMatchQuery.c        |  57 --
 core/Lucy/Test/Search/TestNoMatchQuery.cfh      |  29 -
 core/Lucy/Test/Search/TestPhraseQuery.c         |  53 -
 core/Lucy/Test/Search/TestPhraseQuery.cfh       |  29 -
 core/Lucy/Test/Search/TestPolyQuery.c           |  93 --
 core/Lucy/Test/Search/TestPolyQuery.cfh         |  39 -
 core/Lucy/Test/Search/TestQueryParser.c         |  81 --
 core/Lucy/Test/Search/TestQueryParser.cfh       |  61 --
 core/Lucy/Test/Search/TestQueryParserLogic.c    | 976 -------------------
 core/Lucy/Test/Search/TestQueryParserLogic.cfh  |  32 -
 core/Lucy/Test/Search/TestQueryParserSyntax.c   | 452 ---------
 core/Lucy/Test/Search/TestQueryParserSyntax.cfh |  32 -
 core/Lucy/Test/Search/TestRangeQuery.c          |  75 --
 core/Lucy/Test/Search/TestRangeQuery.cfh        |  29 -
 core/Lucy/Test/Search/TestReqOptQuery.c         |  73 --
 core/Lucy/Test/Search/TestReqOptQuery.cfh       |  29 -
 core/Lucy/Test/Search/TestSeriesMatcher.c       | 136 ---
 core/Lucy/Test/Search/TestSeriesMatcher.cfh     |  29 -
 core/Lucy/Test/Search/TestSortSpec.c            | 642 ------------
 core/Lucy/Test/Search/TestSortSpec.cfh          |  43 -
 core/Lucy/Test/Search/TestSpan.c                |  53 -
 core/Lucy/Test/Search/TestSpan.cfh              |  29 -
 core/Lucy/Test/Search/TestTermQuery.c           |  66 --
 core/Lucy/Test/Search/TestTermQuery.cfh         |  29 -
 core/Lucy/Test/Store/MockFileHandle.c           |  66 --
 core/Lucy/Test/Store/MockFileHandle.cfh         |  44 -
 core/Lucy/Test/Store/TestCompoundFileReader.c   | 375 -------
 core/Lucy/Test/Store/TestCompoundFileReader.cfh |  29 -
 core/Lucy/Test/Store/TestCompoundFileWriter.c   | 162 ---
 core/Lucy/Test/Store/TestCompoundFileWriter.cfh |  29 -
 core/Lucy/Test/Store/TestFSDirHandle.c          | 106 --
 core/Lucy/Test/Store/TestFSDirHandle.cfh        |  29 -
 core/Lucy/Test/Store/TestFSFileHandle.c         | 267 -----
 core/Lucy/Test/Store/TestFSFileHandle.cfh       |  29 -
 core/Lucy/Test/Store/TestFSFolder.c             | 218 -----
 core/Lucy/Test/Store/TestFSFolder.cfh           |  29 -
 core/Lucy/Test/Store/TestFileHandle.c           |  66 --
 core/Lucy/Test/Store/TestFileHandle.cfh         |  29 -
 core/Lucy/Test/Store/TestFolder.c               | 540 ----------
 core/Lucy/Test/Store/TestFolder.cfh             |  29 -
 core/Lucy/Test/Store/TestFolderCommon.c         | 562 -----------
 core/Lucy/Test/Store/TestFolderCommon.cfh       |  40 -
 core/Lucy/Test/Store/TestIOChunks.c             | 126 ---
 core/Lucy/Test/Store/TestIOChunks.cfh           |  31 -
 core/Lucy/Test/Store/TestIOPrimitives.c         | 518 ----------
 core/Lucy/Test/Store/TestIOPrimitives.cfh       |  31 -
 core/Lucy/Test/Store/TestInStream.c             | 225 -----
 core/Lucy/Test/Store/TestInStream.cfh           |  33 -
 core/Lucy/Test/Store/TestRAMDirHandle.c         |  91 --
 core/Lucy/Test/Store/TestRAMDirHandle.cfh       |  29 -
 core/Lucy/Test/Store/TestRAMFileHandle.c        | 177 ----
 core/Lucy/Test/Store/TestRAMFileHandle.cfh      |  29 -
 core/Lucy/Test/Store/TestRAMFolder.c            | 521 ----------
 core/Lucy/Test/Store/TestRAMFolder.cfh          |  29 -
 core/Lucy/Test/TestSchema.c                     | 112 ---
 core/Lucy/Test/TestSchema.cfh                   |  48 -
 core/Lucy/Test/TestSimple.c                     | 112 ---
 core/Lucy/Test/TestSimple.cfh                   |  29 -
 core/Lucy/Test/TestUtils.c                      | 183 ----
 core/Lucy/Test/TestUtils.cfh                    |  87 --
 core/Lucy/Test/Util/TestFreezer.c               | 178 ----
 core/Lucy/Test/Util/TestFreezer.cfh             |  29 -
 core/Lucy/Test/Util/TestIndexFileNames.c        |  73 --
 core/Lucy/Test/Util/TestIndexFileNames.cfh      |  29 -
 core/Lucy/Test/Util/TestJson.c                  | 365 -------
 core/Lucy/Test/Util/TestJson.cfh                |  29 -
 core/Lucy/Test/Util/TestMemoryPool.c            |  61 --
 core/Lucy/Test/Util/TestMemoryPool.cfh          |  29 -
 core/Lucy/Test/Util/TestNumberUtils.c           | 473 ---------
 core/Lucy/Test/Util/TestNumberUtils.cfh         |  29 -
 core/Lucy/Test/Util/TestPriorityQueue.c         | 165 ----
 core/Lucy/Test/Util/TestPriorityQueue.cfh       |  39 -
 core/Lucy/Test/Util/TestSortExternal.c          | 324 ------
 core/Lucy/Test/Util/TestSortExternal.cfh        |  29 -
 core/TestLucy.c                                 |  22 -
 core/TestLucy.cfp                               |   8 -
 go/build.go                                     |   1 +
 perl/Build.PL                                   |   6 +-
 test/Lucy/Test.c                                | 161 +++
 test/Lucy/Test.cfh                              |  26 +
 test/Lucy/Test/Analysis/TestAnalyzer.c          |  69 ++
 test/Lucy/Test/Analysis/TestAnalyzer.cfh        |  39 +
 test/Lucy/Test/Analysis/TestCaseFolder.c        |  73 ++
 test/Lucy/Test/Analysis/TestCaseFolder.cfh      |  29 +
 test/Lucy/Test/Analysis/TestNormalizer.c        | 188 ++++
 test/Lucy/Test/Analysis/TestNormalizer.cfh      |  29 +
 test/Lucy/Test/Analysis/TestPolyAnalyzer.c      | 179 ++++
 test/Lucy/Test/Analysis/TestPolyAnalyzer.cfh    |  29 +
 test/Lucy/Test/Analysis/TestRegexTokenizer.c    |  75 ++
 test/Lucy/Test/Analysis/TestRegexTokenizer.cfh  |  29 +
 test/Lucy/Test/Analysis/TestSnowballStemmer.c   | 116 +++
 test/Lucy/Test/Analysis/TestSnowballStemmer.cfh |  29 +
 .../Lucy/Test/Analysis/TestSnowballStopFilter.c |  86 ++
 .../Test/Analysis/TestSnowballStopFilter.cfh    |  29 +
 test/Lucy/Test/Analysis/TestStandardTokenizer.c | 140 +++
 .../Test/Analysis/TestStandardTokenizer.cfh     |  29 +
 test/Lucy/Test/Highlight/TestHeatMap.c          | 175 ++++
 test/Lucy/Test/Highlight/TestHeatMap.cfh        |  29 +
 test/Lucy/Test/Highlight/TestHighlighter.c      | 446 +++++++++
 test/Lucy/Test/Highlight/TestHighlighter.cfh    |  29 +
 test/Lucy/Test/Index/TestDocWriter.c            |  37 +
 test/Lucy/Test/Index/TestDocWriter.cfh          |  29 +
 test/Lucy/Test/Index/TestHighlightWriter.c      |  37 +
 test/Lucy/Test/Index/TestHighlightWriter.cfh    |  29 +
 test/Lucy/Test/Index/TestIndexManager.c         |  63 ++
 test/Lucy/Test/Index/TestIndexManager.cfh       |  28 +
 test/Lucy/Test/Index/TestPolyReader.c           |  53 +
 test/Lucy/Test/Index/TestPolyReader.cfh         |  28 +
 test/Lucy/Test/Index/TestPostingListWriter.c    |  36 +
 test/Lucy/Test/Index/TestPostingListWriter.cfh  |  29 +
 test/Lucy/Test/Index/TestSegWriter.c            |  37 +
 test/Lucy/Test/Index/TestSegWriter.cfh          |  29 +
 test/Lucy/Test/Index/TestSegment.c              | 169 ++++
 test/Lucy/Test/Index/TestSegment.cfh            |  29 +
 test/Lucy/Test/Index/TestSnapshot.c             | 112 +++
 test/Lucy/Test/Index/TestSnapshot.cfh           |  29 +
 test/Lucy/Test/Index/TestSortWriter.c           | 323 ++++++
 test/Lucy/Test/Index/TestSortWriter.cfh         |  43 +
 test/Lucy/Test/Index/TestTermInfo.c             |  68 ++
 test/Lucy/Test/Index/TestTermInfo.cfh           |  29 +
 test/Lucy/Test/Object/TestBitVector.c           | 453 +++++++++
 test/Lucy/Test/Object/TestBitVector.cfh         |  29 +
 test/Lucy/Test/Object/TestI32Array.c            |  73 ++
 test/Lucy/Test/Object/TestI32Array.cfh          |  29 +
 test/Lucy/Test/Plan/TestArchitecture.c          |  50 +
 test/Lucy/Test/Plan/TestArchitecture.cfh        |  39 +
 test/Lucy/Test/Plan/TestBlobType.c              |  59 ++
 test/Lucy/Test/Plan/TestBlobType.cfh            |  29 +
 test/Lucy/Test/Plan/TestFieldMisc.c             | 248 +++++
 test/Lucy/Test/Plan/TestFieldMisc.cfh           |  29 +
 test/Lucy/Test/Plan/TestFieldType.c             | 107 ++
 test/Lucy/Test/Plan/TestFieldType.cfh           |  33 +
 test/Lucy/Test/Plan/TestFullTextType.c          | 112 +++
 test/Lucy/Test/Plan/TestFullTextType.cfh        |  29 +
 test/Lucy/Test/Plan/TestNumericType.c           | 109 +++
 test/Lucy/Test/Plan/TestNumericType.cfh         |  29 +
 test/Lucy/Test/Search/TestLeafQuery.c           |  70 ++
 test/Lucy/Test/Search/TestLeafQuery.cfh         |  29 +
 test/Lucy/Test/Search/TestMatchAllQuery.c       |  57 ++
 test/Lucy/Test/Search/TestMatchAllQuery.cfh     |  29 +
 test/Lucy/Test/Search/TestNOTQuery.c            |  70 ++
 test/Lucy/Test/Search/TestNOTQuery.cfh          |  29 +
 test/Lucy/Test/Search/TestNoMatchQuery.c        |  57 ++
 test/Lucy/Test/Search/TestNoMatchQuery.cfh      |  29 +
 test/Lucy/Test/Search/TestPhraseQuery.c         |  53 +
 test/Lucy/Test/Search/TestPhraseQuery.cfh       |  29 +
 test/Lucy/Test/Search/TestPolyQuery.c           |  93 ++
 test/Lucy/Test/Search/TestPolyQuery.cfh         |  39 +
 test/Lucy/Test/Search/TestQueryParser.c         |  81 ++
 test/Lucy/Test/Search/TestQueryParser.cfh       |  61 ++
 test/Lucy/Test/Search/TestQueryParserLogic.c    | 976 +++++++++++++++++++
 test/Lucy/Test/Search/TestQueryParserLogic.cfh  |  32 +
 test/Lucy/Test/Search/TestQueryParserSyntax.c   | 452 +++++++++
 test/Lucy/Test/Search/TestQueryParserSyntax.cfh |  32 +
 test/Lucy/Test/Search/TestRangeQuery.c          |  75 ++
 test/Lucy/Test/Search/TestRangeQuery.cfh        |  29 +
 test/Lucy/Test/Search/TestReqOptQuery.c         |  73 ++
 test/Lucy/Test/Search/TestReqOptQuery.cfh       |  29 +
 test/Lucy/Test/Search/TestSeriesMatcher.c       | 136 +++
 test/Lucy/Test/Search/TestSeriesMatcher.cfh     |  29 +
 test/Lucy/Test/Search/TestSortSpec.c            | 642 ++++++++++++
 test/Lucy/Test/Search/TestSortSpec.cfh          |  43 +
 test/Lucy/Test/Search/TestSpan.c                |  53 +
 test/Lucy/Test/Search/TestSpan.cfh              |  29 +
 test/Lucy/Test/Search/TestTermQuery.c           |  66 ++
 test/Lucy/Test/Search/TestTermQuery.cfh         |  29 +
 test/Lucy/Test/Store/MockFileHandle.c           |  66 ++
 test/Lucy/Test/Store/MockFileHandle.cfh         |  44 +
 test/Lucy/Test/Store/TestCompoundFileReader.c   | 375 +++++++
 test/Lucy/Test/Store/TestCompoundFileReader.cfh |  29 +
 test/Lucy/Test/Store/TestCompoundFileWriter.c   | 162 +++
 test/Lucy/Test/Store/TestCompoundFileWriter.cfh |  29 +
 test/Lucy/Test/Store/TestFSDirHandle.c          | 106 ++
 test/Lucy/Test/Store/TestFSDirHandle.cfh        |  29 +
 test/Lucy/Test/Store/TestFSFileHandle.c         | 267 +++++
 test/Lucy/Test/Store/TestFSFileHandle.cfh       |  29 +
 test/Lucy/Test/Store/TestFSFolder.c             | 218 +++++
 test/Lucy/Test/Store/TestFSFolder.cfh           |  29 +
 test/Lucy/Test/Store/TestFileHandle.c           |  66 ++
 test/Lucy/Test/Store/TestFileHandle.cfh         |  29 +
 test/Lucy/Test/Store/TestFolder.c               | 540 ++++++++++
 test/Lucy/Test/Store/TestFolder.cfh             |  29 +
 test/Lucy/Test/Store/TestFolderCommon.c         | 562 +++++++++++
 test/Lucy/Test/Store/TestFolderCommon.cfh       |  40 +
 test/Lucy/Test/Store/TestIOChunks.c             | 126 +++
 test/Lucy/Test/Store/TestIOChunks.cfh           |  31 +
 test/Lucy/Test/Store/TestIOPrimitives.c         | 518 ++++++++++
 test/Lucy/Test/Store/TestIOPrimitives.cfh       |  31 +
 test/Lucy/Test/Store/TestInStream.c             | 225 +++++
 test/Lucy/Test/Store/TestInStream.cfh           |  33 +
 test/Lucy/Test/Store/TestRAMDirHandle.c         |  91 ++
 test/Lucy/Test/Store/TestRAMDirHandle.cfh       |  29 +
 test/Lucy/Test/Store/TestRAMFileHandle.c        | 177 ++++
 test/Lucy/Test/Store/TestRAMFileHandle.cfh      |  29 +
 test/Lucy/Test/Store/TestRAMFolder.c            | 521 ++++++++++
 test/Lucy/Test/Store/TestRAMFolder.cfh          |  29 +
 test/Lucy/Test/TestSchema.c                     | 112 +++
 test/Lucy/Test/TestSchema.cfh                   |  48 +
 test/Lucy/Test/TestSimple.c                     | 112 +++
 test/Lucy/Test/TestSimple.cfh                   |  29 +
 test/Lucy/Test/TestUtils.c                      | 183 ++++
 test/Lucy/Test/TestUtils.cfh                    |  87 ++
 test/Lucy/Test/Util/TestFreezer.c               | 178 ++++
 test/Lucy/Test/Util/TestFreezer.cfh             |  29 +
 test/Lucy/Test/Util/TestIndexFileNames.c        |  73 ++
 test/Lucy/Test/Util/TestIndexFileNames.cfh      |  29 +
 test/Lucy/Test/Util/TestJson.c                  | 365 +++++++
 test/Lucy/Test/Util/TestJson.cfh                |  29 +
 test/Lucy/Test/Util/TestMemoryPool.c            |  61 ++
 test/Lucy/Test/Util/TestMemoryPool.cfh          |  29 +
 test/Lucy/Test/Util/TestNumberUtils.c           | 473 +++++++++
 test/Lucy/Test/Util/TestNumberUtils.cfh         |  29 +
 test/Lucy/Test/Util/TestPriorityQueue.c         | 165 ++++
 test/Lucy/Test/Util/TestPriorityQueue.cfh       |  39 +
 test/Lucy/Test/Util/TestSortExternal.c          | 324 ++++++
 test/Lucy/Test/Util/TestSortExternal.cfh        |  29 +
 test/TestLucy.c                                 |  22 +
 test/TestLucy.cfp                               |   8 +
 284 files changed, 15147 insertions(+), 15132 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 5393e6b..4c4bff0 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -8593,6 +8593,7 @@ typedef struct lucy_MakeFile {
     /* Directories. */
     const char *base_dir;
     char       *core_dir;
+    char       *test_dir;
     const char *host_src_dir;
     char       *autogen_src_dir;
     char       *autogen_inc_dir;
@@ -8781,6 +8782,7 @@ lucy_MakeFile_new(chaz_CLI *cli) {
     /* Initialize directories. */
     self->base_dir = "..";
     self->core_dir = chaz_Util_join(dir_sep, self->base_dir, "core", NULL);
+    self->test_dir = chaz_Util_join(dir_sep, self->base_dir, "test", NULL);
     if (chaz_CLI_defined(cli, "enable-perl")) {
         self->host_src_dir = "xs";
     }
@@ -8858,6 +8860,7 @@ lucy_MakeFile_destroy(lucy_MakeFile *self) {
     chaz_MakeFile_destroy(self->makefile);
 
     free(self->core_dir);
+    free(self->test_dir);
     free(self->autogen_inc_dir);
     free(self->autogen_src_dir);
     free(self->lemon_dir);
@@ -8978,6 +8981,7 @@ lucy_MakeFile_write(lucy_MakeFile *self) {
 
     chaz_MakeBinary_add_src_dir(self->lib, self->host_src_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->core_dir);
+    chaz_MakeBinary_add_src_dir(self->lib, self->test_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstem_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstop_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->utf8proc_dir);
@@ -9032,21 +9036,24 @@ lucy_MakeFile_write_c_cfc_rules(lucy_MakeFile *self) {
 
     sfc.var = chaz_MakeFile_add_var(self->makefile, "CLOWNFISH_HEADERS", NULL);
     chaz_Make_list_files(self->core_dir, "cfh", S_cfh_file_callback, &sfc);
+    chaz_Make_list_files(self->test_dir, "cfh", S_cfh_file_callback, &sfc);
 
     rule = chaz_MakeFile_add_rule(self->makefile, self->autogen_target, NULL);
     chaz_MakeRule_add_prereq(rule, "$(CLOWNFISH_HEADERS)");
     if (cfish_prefix == NULL) {
         cfc_command
             = chaz_Util_join("", "cfc --source=", self->core_dir,
+                             " --source=", self->test_dir,
                              " --dest=autogen --header=cfc_header", NULL);
     }
     else {
         cfc_command
             = chaz_Util_join("", cfish_prefix, dir_sep, "bin", dir_sep,
-                             "cfc --source=", self->core_dir, " --include=",
-                             cfish_prefix, dir_sep, "share", dir_sep,
-                             "clownfish", dir_sep, "include",
-                             " --dest=autogen --header=cfc_header", NULL);
+                             "cfc --source=", self->core_dir, " --source=",
+                             self->test_dir, " --include=", cfish_prefix,
+                             dir_sep, "share", dir_sep, "clownfish", dir_sep,
+                             "include --dest=autogen --header=cfc_header",
+                             NULL);
     }
     chaz_MakeRule_add_command(rule, cfc_command);
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/common/charmonizer.main b/common/charmonizer.main
index 15a2061..e08fdfc 100644
--- a/common/charmonizer.main
+++ b/common/charmonizer.main
@@ -45,6 +45,7 @@ typedef struct lucy_MakeFile {
     /* Directories. */
     const char *base_dir;
     char       *core_dir;
+    char       *test_dir;
     const char *host_src_dir;
     char       *autogen_src_dir;
     char       *autogen_inc_dir;
@@ -233,6 +234,7 @@ lucy_MakeFile_new(chaz_CLI *cli) {
     /* Initialize directories. */
     self->base_dir = "..";
     self->core_dir = chaz_Util_join(dir_sep, self->base_dir, "core", NULL);
+    self->test_dir = chaz_Util_join(dir_sep, self->base_dir, "test", NULL);
     if (chaz_CLI_defined(cli, "enable-perl")) {
         self->host_src_dir = "xs";
     }
@@ -310,6 +312,7 @@ lucy_MakeFile_destroy(lucy_MakeFile *self) {
     chaz_MakeFile_destroy(self->makefile);
 
     free(self->core_dir);
+    free(self->test_dir);
     free(self->autogen_inc_dir);
     free(self->autogen_src_dir);
     free(self->lemon_dir);
@@ -430,6 +433,7 @@ lucy_MakeFile_write(lucy_MakeFile *self) {
 
     chaz_MakeBinary_add_src_dir(self->lib, self->host_src_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->core_dir);
+    chaz_MakeBinary_add_src_dir(self->lib, self->test_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstem_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstop_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->utf8proc_dir);
@@ -484,21 +488,24 @@ lucy_MakeFile_write_c_cfc_rules(lucy_MakeFile *self) {
 
     sfc.var = chaz_MakeFile_add_var(self->makefile, "CLOWNFISH_HEADERS", NULL);
     chaz_Make_list_files(self->core_dir, "cfh", S_cfh_file_callback, &sfc);
+    chaz_Make_list_files(self->test_dir, "cfh", S_cfh_file_callback, &sfc);
 
     rule = chaz_MakeFile_add_rule(self->makefile, self->autogen_target, NULL);
     chaz_MakeRule_add_prereq(rule, "$(CLOWNFISH_HEADERS)");
     if (cfish_prefix == NULL) {
         cfc_command
             = chaz_Util_join("", "cfc --source=", self->core_dir,
+                             " --source=", self->test_dir,
                              " --dest=autogen --header=cfc_header", NULL);
     }
     else {
         cfc_command
             = chaz_Util_join("", cfish_prefix, dir_sep, "bin", dir_sep,
-                             "cfc --source=", self->core_dir, " --include=",
-                             cfish_prefix, dir_sep, "share", dir_sep,
-                             "clownfish", dir_sep, "include",
-                             " --dest=autogen --header=cfc_header", NULL);
+                             "cfc --source=", self->core_dir, " --source=",
+                             self->test_dir, " --include=", cfish_prefix,
+                             dir_sep, "share", dir_sep, "clownfish", dir_sep,
+                             "include --dest=autogen --header=cfc_header",
+                             NULL);
     }
     chaz_MakeRule_add_command(rule, cfc_command);
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test.c b/core/Lucy/Test.c
deleted file mode 100644
index 0edda50..0000000
--- a/core/Lucy/Test.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CFISH_USE_SHORT_NAMES
-#define TESTLUCY_USE_SHORT_NAMES
-
-#include "Lucy/Test.h"
-
-#include "Clownfish/TestHarness/TestBatch.h"
-#include "Clownfish/TestHarness/TestSuite.h"
-
-#include "Lucy/Test/Analysis/TestAnalyzer.h"
-#include "Lucy/Test/Analysis/TestCaseFolder.h"
-#include "Lucy/Test/Analysis/TestNormalizer.h"
-#include "Lucy/Test/Analysis/TestPolyAnalyzer.h"
-#include "Lucy/Test/Analysis/TestRegexTokenizer.h"
-#include "Lucy/Test/Analysis/TestSnowballStemmer.h"
-#include "Lucy/Test/Analysis/TestSnowballStopFilter.h"
-#include "Lucy/Test/Analysis/TestStandardTokenizer.h"
-#include "Lucy/Test/Highlight/TestHeatMap.h"
-#include "Lucy/Test/Highlight/TestHighlighter.h"
-#include "Lucy/Test/Index/TestDocWriter.h"
-#include "Lucy/Test/Index/TestHighlightWriter.h"
-#include "Lucy/Test/Index/TestIndexManager.h"
-#include "Lucy/Test/Index/TestPolyReader.h"
-#include "Lucy/Test/Index/TestPostingListWriter.h"
-#include "Lucy/Test/Index/TestSegWriter.h"
-#include "Lucy/Test/Index/TestSegment.h"
-#include "Lucy/Test/Index/TestSnapshot.h"
-#include "Lucy/Test/Index/TestSortWriter.h"
-#include "Lucy/Test/Index/TestTermInfo.h"
-#include "Lucy/Test/Object/TestBitVector.h"
-#include "Lucy/Test/Object/TestI32Array.h"
-#include "Lucy/Test/Plan/TestBlobType.h"
-#include "Lucy/Test/Plan/TestFieldMisc.h"
-#include "Lucy/Test/Plan/TestFieldType.h"
-#include "Lucy/Test/Plan/TestFullTextType.h"
-#include "Lucy/Test/Plan/TestNumericType.h"
-#include "Lucy/Test/Search/TestLeafQuery.h"
-#include "Lucy/Test/Search/TestMatchAllQuery.h"
-#include "Lucy/Test/Search/TestNOTQuery.h"
-#include "Lucy/Test/Search/TestNoMatchQuery.h"
-#include "Lucy/Test/Search/TestPhraseQuery.h"
-#include "Lucy/Test/Search/TestPolyQuery.h"
-#include "Lucy/Test/Search/TestQueryParserLogic.h"
-#include "Lucy/Test/Search/TestQueryParserSyntax.h"
-#include "Lucy/Test/Search/TestRangeQuery.h"
-#include "Lucy/Test/Search/TestReqOptQuery.h"
-#include "Lucy/Test/Search/TestSeriesMatcher.h"
-#include "Lucy/Test/Search/TestSortSpec.h"
-#include "Lucy/Test/Search/TestSpan.h"
-#include "Lucy/Test/Search/TestTermQuery.h"
-#include "Lucy/Test/Store/TestCompoundFileReader.h"
-#include "Lucy/Test/Store/TestCompoundFileWriter.h"
-#include "Lucy/Test/Store/TestFSDirHandle.h"
-#include "Lucy/Test/Store/TestFSFileHandle.h"
-#include "Lucy/Test/Store/TestFSFolder.h"
-#include "Lucy/Test/Store/TestFileHandle.h"
-#include "Lucy/Test/Store/TestFolder.h"
-#include "Lucy/Test/Store/TestIOChunks.h"
-#include "Lucy/Test/Store/TestIOPrimitives.h"
-#include "Lucy/Test/Store/TestInStream.h"
-#include "Lucy/Test/Store/TestRAMDirHandle.h"
-#include "Lucy/Test/Store/TestRAMFileHandle.h"
-#include "Lucy/Test/Store/TestRAMFolder.h"
-#include "Lucy/Test/TestSchema.h"
-#include "Lucy/Test/TestSimple.h"
-#include "Lucy/Test/Util/TestFreezer.h"
-#include "Lucy/Test/Util/TestIndexFileNames.h"
-#include "Lucy/Test/Util/TestJson.h"
-#include "Lucy/Test/Util/TestMemoryPool.h"
-#include "Lucy/Test/Util/TestNumberUtils.h"
-#include "Lucy/Test/Util/TestPriorityQueue.h"
-#include "Lucy/Test/Util/TestSortExternal.h"
-
-TestSuite*
-Test_create_test_suite() {
-    TestSuite *suite = TestSuite_new();
-
-    TestSuite_Add_Batch(suite, (TestBatch*)TestPriQ_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestBitVector_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSortExternal_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestMemPool_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestNumUtil_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestIxFileNames_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestJson_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFreezer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestI32Arr_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestRAMFH_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFSFH_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestInStream_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFH_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestIOPrimitives_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestIOChunks_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestRAMDH_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFSDH_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFSFolder_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestRAMFolder_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFolder_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestIxManager_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestCFWriter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestCFReader_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestAnalyzer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestPolyAnalyzer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestCaseFolder_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestRegexTokenizer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSnowStop_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSnowStemmer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestNormalizer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestStandardTokenizer_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSnapshot_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestTermInfo_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFieldMisc_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestBatchSchema_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestDocWriter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestHLWriter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestPListWriter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSegWriter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSortWriter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestPolyReader_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFullTextType_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestBlobType_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestNumericType_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestFType_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSeg_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestHighlighter_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSimple_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSpan_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestHeatMap_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestTermQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestPhraseQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSortSpec_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestRangeQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestANDQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestMatchAllQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestNOTQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestReqOptQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestLeafQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestNoMatchQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestSeriesMatcher_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestORQuery_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestQPLogic_new());
-    TestSuite_Add_Batch(suite, (TestBatch*)TestQPSyntax_new());
-
-    return suite;
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test.cfh b/core/Lucy/Test.cfh
deleted file mode 100644
index 3b39130..0000000
--- a/core/Lucy/Test.cfh
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-/** Lucy test suite.
- */
-inert class Lucy::Test {
-    inert incremented TestSuite*
-    create_test_suite();
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestAnalyzer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestAnalyzer.c b/core/Lucy/Test/Analysis/TestAnalyzer.c
deleted file mode 100644
index 6df3223..0000000
--- a/core/Lucy/Test/Analysis/TestAnalyzer.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Test/Analysis/TestAnalyzer.h"
-#include "Lucy/Analysis/Analyzer.h"
-#include "Lucy/Analysis/Inversion.h"
-
-TestAnalyzer*
-TestAnalyzer_new() {
-    return (TestAnalyzer*)Class_Make_Obj(TESTANALYZER);
-}
-
-DummyAnalyzer*
-DummyAnalyzer_new() {
-    DummyAnalyzer *self = (DummyAnalyzer*)Class_Make_Obj(DUMMYANALYZER);
-    return DummyAnalyzer_init(self);
-}
-
-DummyAnalyzer*
-DummyAnalyzer_init(DummyAnalyzer *self) {
-    return (DummyAnalyzer*)Analyzer_init((Analyzer*)self);
-}
-
-Inversion*
-DummyAnalyzer_Transform_IMP(DummyAnalyzer *self, Inversion *inversion) {
-    UNUSED_VAR(self);
-    return (Inversion*)INCREF(inversion);
-}
-
-static void
-test_analysis(TestBatchRunner *runner) {
-    DummyAnalyzer *analyzer = DummyAnalyzer_new();
-    String *source = Str_newf("foo bar baz");
-    Vector *wanted = Vec_new(1);
-    Vec_Push(wanted, (Obj*)Str_newf("foo bar baz"));
-    TestUtils_test_analyzer(runner, (Analyzer*)analyzer, source, wanted,
-                            "test basic analysis");
-    DECREF(wanted);
-    DECREF(source);
-    DECREF(analyzer);
-}
-
-void
-TestAnalyzer_Run_IMP(TestAnalyzer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 3);
-    test_analysis(runner);
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestAnalyzer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestAnalyzer.cfh b/core/Lucy/Test/Analysis/TestAnalyzer.cfh
deleted file mode 100644
index 661e391..0000000
--- a/core/Lucy/Test/Analysis/TestAnalyzer.cfh
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestAnalyzer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestAnalyzer*
-    new();
-
-    void
-    Run(TestAnalyzer *self, TestBatchRunner *runner);
-}
-
-class Lucy::Test::Analysis::DummyAnalyzer inherits Lucy::Analysis::Analyzer {
-    inert incremented DummyAnalyzer*
-    new();
-
-    inert DummyAnalyzer*
-    init(DummyAnalyzer *self);
-
-    public incremented Inversion*
-    Transform(DummyAnalyzer *self, Inversion *inversion);
-}
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestCaseFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestCaseFolder.c b/core/Lucy/Test/Analysis/TestCaseFolder.c
deleted file mode 100644
index 115362d..0000000
--- a/core/Lucy/Test/Analysis/TestCaseFolder.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define C_TESTLUCY_TESTCASEFOLDER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/Boolean.h"
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Test/Analysis/TestCaseFolder.h"
-#include "Lucy/Analysis/CaseFolder.h"
-
-TestCaseFolder*
-TestCaseFolder_new() {
-    return (TestCaseFolder*)Class_Make_Obj(TESTCASEFOLDER);
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    CaseFolder *case_folder = CaseFolder_new();
-    CaseFolder *other       = CaseFolder_new();
-    Obj        *dump        = (Obj*)CaseFolder_Dump(case_folder);
-    CaseFolder *clone       = (CaseFolder*)CaseFolder_Load(other, dump);
-
-    TEST_TRUE(runner, CaseFolder_Equals(case_folder, (Obj*)other), "Equals");
-    TEST_FALSE(runner, CaseFolder_Equals(case_folder, (Obj*)CFISH_TRUE),
-               "Not Equals");
-    TEST_TRUE(runner, CaseFolder_Equals(case_folder, (Obj*)clone),
-              "Dump => Load round trip");
-
-    DECREF(case_folder);
-    DECREF(other);
-    DECREF(dump);
-    DECREF(clone);
-}
-
-static void
-test_analysis(TestBatchRunner *runner) {
-    CaseFolder *case_folder = CaseFolder_new();
-    String *source = Str_newf("caPiTal ofFensE");
-    Vector *wanted = Vec_new(1);
-    Vec_Push(wanted, (Obj*)Str_newf("capital offense"));
-    TestUtils_test_analyzer(runner, (Analyzer*)case_folder, source, wanted,
-                            "lowercase plain text");
-    DECREF(wanted);
-    DECREF(source);
-    DECREF(case_folder);
-}
-
-void
-TestCaseFolder_Run_IMP(TestCaseFolder *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 6);
-    test_Dump_Load_and_Equals(runner);
-    test_analysis(runner);
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestCaseFolder.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestCaseFolder.cfh b/core/Lucy/Test/Analysis/TestCaseFolder.cfh
deleted file mode 100644
index 6138139..0000000
--- a/core/Lucy/Test/Analysis/TestCaseFolder.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestCaseFolder
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestCaseFolder*
-    new();
-
-    void
-    Run(TestCaseFolder *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestNormalizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestNormalizer.c b/core/Lucy/Test/Analysis/TestNormalizer.c
deleted file mode 100644
index 6bb0fb7..0000000
--- a/core/Lucy/Test/Analysis/TestNormalizer.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-
-#define C_TESTLUCY_TESTNORMALIZER
-#define C_LUCY_NORMALIZER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/Boolean.h"
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Clownfish/TestHarness/TestUtils.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Analysis/TestNormalizer.h"
-#include "Lucy/Analysis/Normalizer.h"
-#include "Lucy/Store/FSFolder.h"
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Util/Json.h"
-#include "utf8proc.h"
-
-TestNormalizer*
-TestNormalizer_new() {
-    return (TestNormalizer*)Class_Make_Obj(TESTNORMALIZER);
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    Normalizer *normalizer[4];
-
-    String *NFC  = SSTR_WRAP_C("NFC");
-    String *NFKC = SSTR_WRAP_C("NFKC");
-
-    normalizer[0] = Normalizer_new(NFKC, true,  false);
-    normalizer[1] = Normalizer_new(NFC,  true,  false);
-    normalizer[2] = Normalizer_new(NFKC, false, false);
-    normalizer[3] = Normalizer_new(NFKC, true,  true);
-
-    TEST_FALSE(runner,
-               Normalizer_Equals(normalizer[0], (Obj*)normalizer[1]),
-               "Equals() false with different normalization form");
-    TEST_FALSE(runner,
-               Normalizer_Equals(normalizer[0], (Obj*)normalizer[2]),
-               "Equals() false with different case_fold flag");
-    TEST_FALSE(runner,
-               Normalizer_Equals(normalizer[0], (Obj*)normalizer[3]),
-               "Equals() false with different strip_accents flag");
-
-    for (int i = 0; i < 4; ++i) {
-        Obj *dump = (Obj*)Normalizer_Dump(normalizer[i]);
-        Normalizer *clone = (Normalizer*)Normalizer_Load(normalizer[i], dump);
-
-        TEST_TRUE(runner,
-                  Normalizer_Equals(normalizer[i], (Obj*)clone),
-                  "Dump => Load round trip");
-
-        DECREF(normalizer[i]);
-        DECREF(dump);
-        DECREF(clone);
-    }
-}
-
-static void
-test_normalization(TestBatchRunner *runner) {
-    FSFolder *modules_folder = TestUtils_modules_folder();
-    if (modules_folder == NULL) {
-        SKIP(runner, 13, "Can't locate test data");
-        return;
-    }
-
-    String *path = Str_newf("unicode/utf8proc/tests.json");
-    Vector *tests = (Vector*)Json_slurp_json((Folder*)modules_folder, path);
-    if (!tests) { RETHROW(Err_get_error()); }
-
-    for (size_t i = 0, max = Vec_Get_Size(tests); i < max; i++) {
-        Hash *test = (Hash*)Vec_Fetch(tests, i);
-        String *form = (String*)Hash_Fetch_Utf8(
-                            test, "normalization_form", 18);
-        bool case_fold = Bool_Get_Value((Boolean*)Hash_Fetch_Utf8(
-                                              test, "case_fold", 9));
-        bool strip_accents = Bool_Get_Value((Boolean*)Hash_Fetch_Utf8(
-                                                  test, "strip_accents", 13));
-        Normalizer *normalizer = Normalizer_new(form, case_fold, strip_accents);
-        Vector *words = (Vector*)Hash_Fetch_Utf8(test, "words", 5);
-        Vector *norms = (Vector*)Hash_Fetch_Utf8(test, "norms", 5);
-        for (size_t j = 0, max = Vec_Get_Size(words); j < max; j++) {
-            String *word = (String*)Vec_Fetch(words, j);
-            Vector *got  = Normalizer_Split(normalizer, word);
-            String *norm = (String*)Vec_Fetch(got, 0);
-            char   *fstr = Str_To_Utf8(form);
-            char   *wstr = Str_To_Utf8(word);
-            TEST_TRUE(runner,
-                      norm
-                      && Str_is_a(norm, STRING)
-                      && Str_Equals(norm, Vec_Fetch(norms, j)),
-                      "Normalize %s %d %d: %s", fstr,
-                      case_fold, strip_accents, wstr
-                     );
-            free(fstr);
-            free(wstr);
-            DECREF(got);
-        }
-        DECREF(normalizer);
-    }
-
-    DECREF(tests);
-    DECREF(modules_folder);
-    DECREF(path);
-}
-
-static void
-test_utf8proc_normalization(TestBatchRunner *runner) {
-    SKIP(runner, 1,
-         "utf8proc can't handle control chars or Unicode non-chars");
-    return;
-
-    for (int32_t i = 0; i < 100; i++) {
-        String *source = TestUtils_random_string(rand() % 40);
-
-        // Normalize once.
-        uint8_t *normalized;
-        int32_t check = utf8proc_map((const uint8_t*)Str_Get_Ptr8(source),
-                                     (ssize_t)Str_Get_Size(source),
-                                     &normalized,
-                                     UTF8PROC_STABLE  |
-                                     UTF8PROC_COMPOSE |
-                                     UTF8PROC_COMPAT  |
-                                     UTF8PROC_CASEFOLD);
-        if (check < 0) {
-            lucy_Json_set_tolerant(1);
-            String *json = lucy_Json_to_json((Obj*)source);
-            if (!json) {
-                json = Str_newf("[failed to encode]");
-            }
-            char *str = Str_To_Utf8(json);
-            FAIL(runner, "Failed to normalize: %s", str);
-            free(str);
-            DECREF(json);
-            DECREF(source);
-            return;
-        }
-
-        // Normalize again.
-        size_t normalized_len = strlen((char*)normalized);
-        uint8_t *dupe;
-        int32_t dupe_check = utf8proc_map(normalized, (ssize_t)normalized_len, &dupe,
-                                          UTF8PROC_STABLE  |
-                                          UTF8PROC_COMPOSE |
-                                          UTF8PROC_COMPAT  |
-                                          UTF8PROC_CASEFOLD);
-        if (dupe_check < 0) {
-            THROW(ERR, "Unexpected normalization error: %i32", dupe_check);
-        }
-        int comparison = strcmp((char*)normalized, (char*)dupe);
-        free(dupe);
-        free(normalized);
-        DECREF(source);
-        if (comparison != 0) {
-            FAIL(runner, "Not fully normalized");
-            return;
-        }
-    }
-    PASS(runner, "Normalization successful.");
-}
-
-void
-TestNormalizer_Run_IMP(TestNormalizer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 21);
-    test_Dump_Load_and_Equals(runner);
-    test_normalization(runner);
-    test_utf8proc_normalization(runner);
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestNormalizer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestNormalizer.cfh b/core/Lucy/Test/Analysis/TestNormalizer.cfh
deleted file mode 100644
index 0200838..0000000
--- a/core/Lucy/Test/Analysis/TestNormalizer.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestNormalizer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestNormalizer*
-    new();
-
-    void
-    Run(TestNormalizer *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c b/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
deleted file mode 100644
index efb539c..0000000
--- a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define C_TESTLUCY_TESTPOLYANALYZER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Test/Analysis/TestPolyAnalyzer.h"
-#include "Lucy/Analysis/PolyAnalyzer.h"
-#include "Lucy/Analysis/Normalizer.h"
-#include "Lucy/Analysis/RegexTokenizer.h"
-#include "Lucy/Analysis/SnowballStopFilter.h"
-#include "Lucy/Analysis/SnowballStemmer.h"
-#include "Lucy/Analysis/StandardTokenizer.h"
-
-TestPolyAnalyzer*
-TestPolyAnalyzer_new() {
-    return (TestPolyAnalyzer*)Class_Make_Obj(TESTPOLYANALYZER);
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    if (!RegexTokenizer_is_available()) {
-        SKIP(runner, 3, "RegexTokenizer not available");
-        return;
-    }
-
-    String       *EN          = SSTR_WRAP_C("en");
-    String       *ES          = SSTR_WRAP_C("es");
-    PolyAnalyzer *analyzer    = PolyAnalyzer_new(EN, NULL);
-    PolyAnalyzer *other       = PolyAnalyzer_new(ES, NULL);
-    Obj          *dump        = (Obj*)PolyAnalyzer_Dump(analyzer);
-    Obj          *other_dump  = (Obj*)PolyAnalyzer_Dump(other);
-    PolyAnalyzer *clone       = (PolyAnalyzer*)PolyAnalyzer_Load(other, dump);
-    PolyAnalyzer *other_clone
-        = (PolyAnalyzer*)PolyAnalyzer_Load(other, other_dump);
-
-    TEST_FALSE(runner, PolyAnalyzer_Equals(analyzer, (Obj*)other),
-               "Equals() false with different language");
-    TEST_TRUE(runner, PolyAnalyzer_Equals(analyzer, (Obj*)clone),
-              "Dump => Load round trip");
-    TEST_TRUE(runner, PolyAnalyzer_Equals(other, (Obj*)other_clone),
-              "Dump => Load round trip");
-
-    DECREF(analyzer);
-    DECREF(dump);
-    DECREF(clone);
-    DECREF(other);
-    DECREF(other_dump);
-    DECREF(other_clone);
-}
-
-static void
-test_analysis(TestBatchRunner *runner) {
-    String             *EN          = SSTR_WRAP_C("en");
-    String             *source_text = Str_newf("Eats, shoots and leaves.");
-    Normalizer         *normalizer  = Normalizer_new(NULL, true, false);
-    StandardTokenizer  *tokenizer   = StandardTokenizer_new();
-    SnowballStopFilter *stopfilter  = SnowStop_new(EN, NULL);
-    SnowballStemmer    *stemmer     = SnowStemmer_new(EN);
-
-    {
-        Vector       *analyzers    = Vec_new(0);
-        PolyAnalyzer *polyanalyzer = PolyAnalyzer_new(NULL, analyzers);
-        Vector       *expected     = Vec_new(1);
-        Vec_Push(expected, INCREF(source_text));
-        TestUtils_test_analyzer(runner, (Analyzer*)polyanalyzer, source_text,
-                                expected, "No sub analyzers");
-        DECREF(expected);
-        DECREF(polyanalyzer);
-        DECREF(analyzers);
-    }
-
-    {
-        Vector       *analyzers    = Vec_new(0);
-        Vec_Push(analyzers, INCREF(normalizer));
-        PolyAnalyzer *polyanalyzer = PolyAnalyzer_new(NULL, analyzers);
-        Vector       *expected     = Vec_new(1);
-        Vec_Push(expected, (Obj*)Str_newf("eats, shoots and leaves."));
-        TestUtils_test_analyzer(runner, (Analyzer*)polyanalyzer, source_text,
-                                expected, "With Normalizer");
-        DECREF(expected);
-        DECREF(polyanalyzer);
-        DECREF(analyzers);
-    }
-
-    {
-        Vector       *analyzers    = Vec_new(0);
-        Vec_Push(analyzers, INCREF(normalizer));
-        Vec_Push(analyzers, INCREF(tokenizer));
-        PolyAnalyzer *polyanalyzer = PolyAnalyzer_new(NULL, analyzers);
-        Vector       *expected     = Vec_new(1);
-        Vec_Push(expected, (Obj*)Str_newf("eats"));
-        Vec_Push(expected, (Obj*)Str_newf("shoots"));
-        Vec_Push(expected, (Obj*)Str_newf("and"));
-        Vec_Push(expected, (Obj*)Str_newf("leaves"));
-        TestUtils_test_analyzer(runner, (Analyzer*)polyanalyzer, source_text,
-                                expected, "With StandardTokenizer");
-        DECREF(expected);
-        DECREF(polyanalyzer);
-        DECREF(analyzers);
-    }
-
-    {
-        Vector       *analyzers    = Vec_new(0);
-        Vec_Push(analyzers, INCREF(normalizer));
-        Vec_Push(analyzers, INCREF(tokenizer));
-        Vec_Push(analyzers, INCREF(stopfilter));
-        PolyAnalyzer *polyanalyzer = PolyAnalyzer_new(NULL, analyzers);
-        Vector       *expected     = Vec_new(1);
-        Vec_Push(expected, (Obj*)Str_newf("eats"));
-        Vec_Push(expected, (Obj*)Str_newf("shoots"));
-        Vec_Push(expected, (Obj*)Str_newf("leaves"));
-        TestUtils_test_analyzer(runner, (Analyzer*)polyanalyzer, source_text,
-                                expected, "With SnowballStopFilter");
-        DECREF(expected);
-        DECREF(polyanalyzer);
-        DECREF(analyzers);
-    }
-
-    {
-        Vector       *analyzers    = Vec_new(0);
-        Vec_Push(analyzers, INCREF(normalizer));
-        Vec_Push(analyzers, INCREF(tokenizer));
-        Vec_Push(analyzers, INCREF(stopfilter));
-        Vec_Push(analyzers, INCREF(stemmer));
-        PolyAnalyzer *polyanalyzer = PolyAnalyzer_new(NULL, analyzers);
-        Vector       *expected     = Vec_new(1);
-        Vec_Push(expected, (Obj*)Str_newf("eat"));
-        Vec_Push(expected, (Obj*)Str_newf("shoot"));
-        Vec_Push(expected, (Obj*)Str_newf("leav"));
-        TestUtils_test_analyzer(runner, (Analyzer*)polyanalyzer, source_text,
-                                expected, "With SnowballStemmer");
-        DECREF(expected);
-        DECREF(polyanalyzer);
-        DECREF(analyzers);
-    }
-
-    DECREF(stemmer);
-    DECREF(stopfilter);
-    DECREF(tokenizer);
-    DECREF(normalizer);
-    DECREF(source_text);
-}
-
-static void
-test_Get_Analyzers(TestBatchRunner *runner) {
-    Vector *analyzers = Vec_new(0);
-    PolyAnalyzer *analyzer = PolyAnalyzer_new(NULL, analyzers);
-    TEST_TRUE(runner, PolyAnalyzer_Get_Analyzers(analyzer) == analyzers,
-              "Get_Analyzers()");
-    DECREF(analyzer);
-    DECREF(analyzers);
-}
-
-void
-TestPolyAnalyzer_Run_IMP(TestPolyAnalyzer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 19);
-    test_Dump_Load_and_Equals(runner);
-    test_analysis(runner);
-    test_Get_Analyzers(runner);
-}
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh b/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
deleted file mode 100644
index cd50a76..0000000
--- a/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestPolyAnalyzer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestPolyAnalyzer*
-    new();
-
-    void
-    Run(TestPolyAnalyzer *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestRegexTokenizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestRegexTokenizer.c b/core/Lucy/Test/Analysis/TestRegexTokenizer.c
deleted file mode 100644
index d24ea1d..0000000
--- a/core/Lucy/Test/Analysis/TestRegexTokenizer.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define C_TESTLUCY_TESTREGEXTOKENIZER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Analysis/TestRegexTokenizer.h"
-#include "Lucy/Analysis/RegexTokenizer.h"
-
-
-TestRegexTokenizer*
-TestRegexTokenizer_new() {
-    return (TestRegexTokenizer*)Class_Make_Obj(TESTREGEXTOKENIZER);
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    if (!RegexTokenizer_is_available()) {
-        SKIP(runner, 3, "RegexTokenizer not available");
-        return;
-    }
-
-    RegexTokenizer *word_char_tokenizer
-        = RegexTokenizer_new(SSTR_WRAP_C("\\w+"));
-    RegexTokenizer *whitespace_tokenizer
-        = RegexTokenizer_new(SSTR_WRAP_C("\\S+"));
-    Obj *word_char_dump  = RegexTokenizer_Dump(word_char_tokenizer);
-    Obj *whitespace_dump = RegexTokenizer_Dump(whitespace_tokenizer);
-    RegexTokenizer *word_char_clone
-        = RegexTokenizer_Load(whitespace_tokenizer, word_char_dump);
-    RegexTokenizer *whitespace_clone
-        = RegexTokenizer_Load(whitespace_tokenizer, whitespace_dump);
-
-    TEST_FALSE(runner,
-               RegexTokenizer_Equals(word_char_tokenizer, (Obj*)whitespace_tokenizer),
-               "Equals() false with different pattern");
-    TEST_TRUE(runner,
-              RegexTokenizer_Equals(word_char_tokenizer, (Obj*)word_char_clone),
-              "Dump => Load round trip");
-    TEST_TRUE(runner,
-              RegexTokenizer_Equals(whitespace_tokenizer, (Obj*)whitespace_clone),
-              "Dump => Load round trip");
-
-    DECREF(word_char_tokenizer);
-    DECREF(word_char_dump);
-    DECREF(word_char_clone);
-    DECREF(whitespace_tokenizer);
-    DECREF(whitespace_dump);
-    DECREF(whitespace_clone);
-}
-
-void
-TestRegexTokenizer_Run_IMP(TestRegexTokenizer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 3);
-    test_Dump_Load_and_Equals(runner);
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh b/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
deleted file mode 100644
index 00e3a60..0000000
--- a/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestRegexTokenizer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestRegexTokenizer*
-    new();
-
-    void
-    Run(TestRegexTokenizer *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestSnowballStemmer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStemmer.c b/core/Lucy/Test/Analysis/TestSnowballStemmer.c
deleted file mode 100644
index 4da377f..0000000
--- a/core/Lucy/Test/Analysis/TestSnowballStemmer.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define C_TESTLUCY_TESTSNOWBALLSTEMMER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/HashIterator.h"
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Analysis/TestSnowballStemmer.h"
-#include "Lucy/Analysis/SnowballStemmer.h"
-#include "Lucy/Store/FSFolder.h"
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Util/Json.h"
-
-TestSnowballStemmer*
-TestSnowStemmer_new() {
-    return (TestSnowballStemmer*)Class_Make_Obj(TESTSNOWBALLSTEMMER);
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    String *EN = SSTR_WRAP_C("en");
-    String *ES = SSTR_WRAP_C("es");
-    SnowballStemmer *stemmer = SnowStemmer_new(EN);
-    SnowballStemmer *other   = SnowStemmer_new(ES);
-    Obj *dump       = (Obj*)SnowStemmer_Dump(stemmer);
-    Obj *other_dump = (Obj*)SnowStemmer_Dump(other);
-    SnowballStemmer *clone       = (SnowballStemmer*)SnowStemmer_Load(other, dump);
-    SnowballStemmer *other_clone = (SnowballStemmer*)SnowStemmer_Load(other, other_dump);
-
-    TEST_FALSE(runner,
-               SnowStemmer_Equals(stemmer, (Obj*)other),
-               "Equals() false with different language");
-    TEST_TRUE(runner,
-              SnowStemmer_Equals(stemmer, (Obj*)clone),
-              "Dump => Load round trip");
-    TEST_TRUE(runner,
-              SnowStemmer_Equals(other, (Obj*)other_clone),
-              "Dump => Load round trip");
-
-    DECREF(stemmer);
-    DECREF(dump);
-    DECREF(clone);
-    DECREF(other);
-    DECREF(other_dump);
-    DECREF(other_clone);
-}
-
-static void
-test_stemming(TestBatchRunner *runner) {
-    FSFolder *modules_folder = TestUtils_modules_folder();
-    if (modules_folder == NULL) {
-        SKIP(runner, 150, "Can't locate test data");
-        return;
-    }
-
-    String *path = Str_newf("analysis/snowstem/source/test/tests.json");
-    Hash *tests = (Hash*)Json_slurp_json((Folder*)modules_folder, path);
-    if (!tests) { RETHROW(Err_get_error()); }
-
-    HashIterator *iter = HashIter_new(tests);
-    while (HashIter_Next(iter)) {
-        String *iso       = HashIter_Get_Key(iter);
-        char   *iso_str   = Str_To_Utf8(iso);
-        Hash   *lang_data = (Hash*)HashIter_Get_Value(iter);
-        Vector *words = (Vector*)Hash_Fetch_Utf8(lang_data, "words", 5);
-        Vector *stems = (Vector*)Hash_Fetch_Utf8(lang_data, "stems", 5);
-        SnowballStemmer *stemmer = SnowStemmer_new(iso);
-        for (size_t i = 0, max = Vec_Get_Size(words); i < max; i++) {
-            String *word  = (String*)Vec_Fetch(words, i);
-            char   *wstr  = Str_To_Utf8(word);
-            Vector *got   = SnowStemmer_Split(stemmer, word);
-            String *stem  = (String*)Vec_Fetch(got, 0);
-            TEST_TRUE(runner,
-                      stem
-                      && Str_is_a(stem, STRING)
-                      && Str_Equals(stem, Vec_Fetch(stems, i)),
-                      "Stem %s: %s", iso_str, wstr
-                     );
-            free(wstr);
-            DECREF(got);
-        }
-        free(iso_str);
-        DECREF(stemmer);
-    }
-    DECREF(iter);
-
-    DECREF(tests);
-    DECREF(modules_folder);
-    DECREF(path);
-}
-
-void
-TestSnowStemmer_Run_IMP(TestSnowballStemmer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 153);
-    test_Dump_Load_and_Equals(runner);
-    test_stemming(runner);
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh b/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
deleted file mode 100644
index 7c37248..0000000
--- a/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestSnowballStemmer nickname TestSnowStemmer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestSnowballStemmer*
-    new();
-
-    void
-    Run(TestSnowballStemmer *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStopFilter.c b/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
deleted file mode 100644
index dc555f1..0000000
--- a/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define C_TESTLUCY_TESTSNOWBALLSTOPFILTER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Analysis/TestSnowballStopFilter.h"
-#include "Lucy/Analysis/SnowballStopFilter.h"
-
-TestSnowballStopFilter*
-TestSnowStop_new() {
-    return (TestSnowballStopFilter*)Class_Make_Obj(TESTSNOWBALLSTOPFILTER);
-}
-
-static SnowballStopFilter*
-S_make_stopfilter(void *unused, ...) {
-    va_list args;
-    SnowballStopFilter *self = (SnowballStopFilter*)Class_Make_Obj(SNOWBALLSTOPFILTER);
-    Hash *stoplist = Hash_new(0);
-    char *stopword;
-
-    va_start(args, unused);
-    while (NULL != (stopword = va_arg(args, char*))) {
-        Hash_Store_Utf8(stoplist, stopword, strlen(stopword),
-                        (Obj*)Str_newf(""));
-    }
-    va_end(args);
-
-    self = SnowStop_init(self, NULL, stoplist);
-    DECREF(stoplist);
-    return self;
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    SnowballStopFilter *stopfilter =
-        S_make_stopfilter(NULL, "foo", "bar", "baz", NULL);
-    SnowballStopFilter *other =
-        S_make_stopfilter(NULL, "foo", "bar", NULL);
-    Obj *dump       = SnowStop_Dump(stopfilter);
-    Obj *other_dump = SnowStop_Dump(other);
-    SnowballStopFilter *clone       = (SnowballStopFilter*)SnowStop_Load(other, dump);
-    SnowballStopFilter *other_clone = (SnowballStopFilter*)SnowStop_Load(other, other_dump);
-
-    TEST_FALSE(runner,
-               SnowStop_Equals(stopfilter, (Obj*)other),
-               "Equals() false with different stoplist");
-    TEST_TRUE(runner,
-              SnowStop_Equals(stopfilter, (Obj*)clone),
-              "Dump => Load round trip");
-    TEST_TRUE(runner,
-              SnowStop_Equals(other, (Obj*)other_clone),
-              "Dump => Load round trip");
-
-    DECREF(stopfilter);
-    DECREF(dump);
-    DECREF(clone);
-    DECREF(other);
-    DECREF(other_dump);
-    DECREF(other_clone);
-}
-
-void
-TestSnowStop_Run_IMP(TestSnowballStopFilter *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 3);
-    test_Dump_Load_and_Equals(runner);
-}
-
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh b/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
deleted file mode 100644
index c916694..0000000
--- a/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestSnowballStopFilter nickname TestSnowStop
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestSnowballStopFilter*
-    new();
-
-    void
-    Run(TestSnowballStopFilter *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestStandardTokenizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestStandardTokenizer.c b/core/Lucy/Test/Analysis/TestStandardTokenizer.c
deleted file mode 100644
index 548bf2f..0000000
--- a/core/Lucy/Test/Analysis/TestStandardTokenizer.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define C_TESTLUCY_TESTSTANDARDTOKENIZER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Analysis/TestStandardTokenizer.h"
-#include "Lucy/Analysis/StandardTokenizer.h"
-#include "Lucy/Store/FSFolder.h"
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Util/Json.h"
-
-TestStandardTokenizer*
-TestStandardTokenizer_new() {
-    return (TestStandardTokenizer*)Class_Make_Obj(TESTSTANDARDTOKENIZER);
-}
-
-static void
-test_Dump_Load_and_Equals(TestBatchRunner *runner) {
-    StandardTokenizer *tokenizer = StandardTokenizer_new();
-    Obj *dump  = StandardTokenizer_Dump(tokenizer);
-    StandardTokenizer *clone
-        = (StandardTokenizer*)StandardTokenizer_Load(tokenizer, dump);
-
-    TEST_TRUE(runner,
-              StandardTokenizer_Equals(tokenizer, (Obj*)clone),
-              "Dump => Load round trip");
-
-    DECREF(tokenizer);
-    DECREF(dump);
-    DECREF(clone);
-}
-
-static void
-test_tokenizer(TestBatchRunner *runner) {
-    StandardTokenizer *tokenizer = StandardTokenizer_new();
-
-    String *word = SSTR_WRAP_C(
-                              " ."
-                              "tha\xCC\x82t's"
-                              ":"
-                              "1,02\xC2\xADZ4.38"
-                              "\xE0\xB8\x81\xC2\xAD\xC2\xAD"
-                              "\xF0\xA0\x80\x80"
-                              "a"
-                              "/");
-    Vector *got = StandardTokenizer_Split(tokenizer, word);
-    String *token = (String*)Vec_Fetch(got, 0);
-    char   *token_str = Str_To_Utf8(token);
-    TEST_TRUE(runner,
-              token
-              && Str_is_a(token, STRING)
-              && Str_Equals_Utf8(token, "tha\xcc\x82t's", 8),
-              "Token: %s", token_str);
-    free(token_str);
-    token = (String*)Vec_Fetch(got, 1);
-    token_str = Str_To_Utf8(token);
-    TEST_TRUE(runner,
-              token
-              && Str_is_a(token, STRING)
-              && Str_Equals_Utf8(token, "1,02\xC2\xADZ4.38", 11),
-              "Token: %s", token_str);
-    free(token_str);
-    token = (String*)Vec_Fetch(got, 2);
-    token_str = Str_To_Utf8(token);
-    TEST_TRUE(runner,
-              token
-              && Str_is_a(token, STRING)
-              && Str_Equals_Utf8(token, "\xE0\xB8\x81\xC2\xAD\xC2\xAD", 7),
-              "Token: %s", token_str);
-    free(token_str);
-    token = (String*)Vec_Fetch(got, 3);
-    token_str = Str_To_Utf8(token);
-    TEST_TRUE(runner,
-              token
-              && Str_is_a(token, STRING)
-              && Str_Equals_Utf8(token, "\xF0\xA0\x80\x80", 4),
-              "Token: %s", token_str);
-    free(token_str);
-    token = (String*)Vec_Fetch(got, 4);
-    token_str = Str_To_Utf8(token);
-    TEST_TRUE(runner,
-              token
-              && Str_is_a(token, STRING)
-              && Str_Equals_Utf8(token, "a", 1),
-              "Token: %s", token_str);
-    free(token_str);
-    DECREF(got);
-
-    FSFolder *modules_folder = TestUtils_modules_folder();
-    if (modules_folder == NULL) {
-        SKIP(runner, 1372, "Can't locate test data");
-    }
-    else {
-        String *path = Str_newf("unicode/ucd/WordBreakTest.json");
-        Vector *tests = (Vector*)Json_slurp_json((Folder*)modules_folder, path);
-        if (!tests) { RETHROW(Err_get_error()); }
-
-        for (size_t i = 0, max = Vec_Get_Size(tests); i < max; i++) {
-            Hash *test = (Hash*)Vec_Fetch(tests, i);
-            String *text = (String*)Hash_Fetch_Utf8(test, "text", 4);
-            Vector *wanted = (Vector*)Hash_Fetch_Utf8(test, "words", 5);
-            Vector *got = StandardTokenizer_Split(tokenizer, text);
-            TEST_TRUE(runner, Vec_Equals(wanted, (Obj*)got), "UCD test #%d",
-                      (int)i + 1);
-            DECREF(got);
-        }
-
-        DECREF(tests);
-        DECREF(modules_folder);
-        DECREF(path);
-    }
-
-    DECREF(tokenizer);
-}
-
-void
-TestStandardTokenizer_Run_IMP(TestStandardTokenizer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 1378);
-    test_Dump_Load_and_Equals(runner);
-    test_tokenizer(runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh b/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
deleted file mode 100644
index 8e3d942..0000000
--- a/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-parcel TestLucy;
-
-class Lucy::Test::Analysis::TestStandardTokenizer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestStandardTokenizer*
-    new();
-
-    void
-    Run(TestStandardTokenizer *self, TestBatchRunner *runner);
-}
-
-