http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Store/TestRAMFileHandle.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestRAMFileHandle.cfh 
b/core/Lucy/Test/Store/TestRAMFileHandle.cfh
deleted file mode 100644
index d5418cf..0000000
--- a/core/Lucy/Test/Store/TestRAMFileHandle.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::Store::TestRAMFileHandle nickname TestRAMFH
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestRAMFileHandle*
-    new();
-
-    void
-    Run(TestRAMFileHandle *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Store/TestRAMFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestRAMFolder.c 
b/core/Lucy/Test/Store/TestRAMFolder.c
deleted file mode 100644
index c148fe3..0000000
--- a/core/Lucy/Test/Store/TestRAMFolder.c
+++ /dev/null
@@ -1,521 +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_LUCY_RAMFOLDER
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Store/TestRAMFolder.h"
-#include "Lucy/Store/RAMFolder.h"
-#include "Lucy/Store/DirHandle.h"
-#include "Lucy/Store/RAMDirHandle.h"
-#include "Lucy/Store/RAMFileHandle.h"
-
-static String *foo           = NULL;
-static String *bar           = NULL;
-static String *baz           = NULL;
-static String *boffo         = NULL;
-static String *banana        = NULL;
-static String *foo_bar       = NULL;
-static String *foo_bar_baz   = NULL;
-static String *foo_bar_boffo = NULL;
-static String *foo_boffo     = NULL;
-static String *foo_foo       = NULL;
-static String *nope          = NULL;
-static String *nope_nyet     = NULL;
-
-TestRAMFolder*
-TestRAMFolder_new() {
-    return (TestRAMFolder*)Class_Make_Obj(TESTRAMFOLDER);
-}
-
-static void
-S_init_strings(void) {
-    foo           = Str_newf("foo");
-    bar           = Str_newf("bar");
-    baz           = Str_newf("baz");
-    boffo         = Str_newf("boffo");
-    banana        = Str_newf("banana");
-    foo_bar       = Str_newf("foo/bar");
-    foo_bar_baz   = Str_newf("foo/bar/baz");
-    foo_bar_boffo = Str_newf("foo/bar/boffo");
-    foo_boffo     = Str_newf("foo/boffo");
-    foo_foo       = Str_newf("foo/foo");
-    nope          = Str_newf("nope");
-    nope_nyet     = Str_newf("nope/nyet");
-}
-
-static void
-S_destroy_strings(void) {
-    DECREF(foo);
-    DECREF(bar);
-    DECREF(baz);
-    DECREF(boffo);
-    DECREF(banana);
-    DECREF(foo_bar);
-    DECREF(foo_bar_baz);
-    DECREF(foo_bar_boffo);
-    DECREF(foo_boffo);
-    DECREF(foo_foo);
-    DECREF(nope);
-    DECREF(nope_nyet);
-}
-
-static void
-test_Initialize_and_Check(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    RAMFolder_Initialize(folder);
-    PASS(runner, "Initialized concludes without incident");
-    TEST_TRUE(runner, RAMFolder_Check(folder), "Check succeeds");
-    DECREF(folder);
-}
-
-static void
-test_Local_Exists(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    FileHandle *fh = RAMFolder_Open_FileHandle(folder, boffo,
-                                               FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    RAMFolder_Local_MkDir(folder, foo);
-
-    TEST_TRUE(runner, RAMFolder_Local_Exists(folder, boffo),
-              "Local_Exists() returns true for file");
-    TEST_TRUE(runner, RAMFolder_Local_Exists(folder, foo),
-              "Local_Exists() returns true for dir");
-    TEST_FALSE(runner, RAMFolder_Local_Exists(folder, bar),
-               "Local_Exists() returns false for non-existent entry");
-
-    DECREF(folder);
-}
-
-static void
-test_Local_Is_Directory(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    FileHandle *fh = RAMFolder_Open_FileHandle(folder, boffo,
-                                               FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    RAMFolder_Local_MkDir(folder, foo);
-
-    TEST_FALSE(runner, RAMFolder_Local_Is_Directory(folder, boffo),
-               "Local_Is_Directory() returns false for file");
-    TEST_TRUE(runner, RAMFolder_Local_Is_Directory(folder, foo),
-              "Local_Is_Directory() returns true for dir");
-    TEST_FALSE(runner, RAMFolder_Local_Is_Directory(folder, bar),
-               "Local_Is_Directory() returns false for non-existent entry");
-
-    DECREF(folder);
-}
-
-static void
-test_Local_Find_Folder(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    RAMFolder *local;
-    FileHandle *fh;
-
-    RAMFolder_MkDir(folder, foo);
-    RAMFolder_MkDir(folder, foo_bar);
-    fh = RAMFolder_Open_FileHandle(folder, boffo,
-                                   FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    fh = RAMFolder_Open_FileHandle(folder, foo_boffo,
-                                   FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, nope);
-    TEST_TRUE(runner, local == NULL, "Non-existent entry yields NULL");
-
-    String *empty = SSTR_BLANK();
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, empty);
-    TEST_TRUE(runner, local == NULL, "Empty string yields NULL");
-
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, foo_bar);
-    TEST_TRUE(runner, local == NULL, "nested folder yields NULL");
-
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, foo_boffo);
-    TEST_TRUE(runner, local == NULL, "nested file yields NULL");
-
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, boffo);
-    TEST_TRUE(runner, local == NULL, "local file yields NULL");
-
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, bar);
-    TEST_TRUE(runner, local == NULL, "name of nested folder yields NULL");
-
-    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, foo);
-    TEST_TRUE(runner,
-              local
-              && RAMFolder_is_a(local, RAMFOLDER)
-              && Str_Equals_Utf8(RAMFolder_Get_Path(local), "foo", 3),
-              "Find local directory");
-
-    DECREF(folder);
-}
-
-static void
-test_Local_MkDir(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    bool result;
-
-    result = RAMFolder_Local_MkDir(folder, foo);
-    TEST_TRUE(runner, result, "Local_MkDir succeeds and returns true");
-
-    Err_set_error(NULL);
-    result = RAMFolder_Local_MkDir(folder, foo);
-    TEST_FALSE(runner, result,
-               "Local_MkDir returns false when a dir already exists");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Local_MkDir sets global error when a dir already exists");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo),
-              "Existing dir untouched after failed Local_MkDir");
-
-    FileHandle *fh = RAMFolder_Open_FileHandle(folder, boffo,
-                                               FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    Err_set_error(NULL);
-    result = RAMFolder_Local_MkDir(folder, foo);
-    TEST_FALSE(runner, result,
-               "Local_MkDir returns false when a file already exists");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Local_MkDir sets global error when a file already exists");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo) &&
-              !RAMFolder_Local_Is_Directory(folder, boffo),
-              "Existing file untouched after failed Local_MkDir");
-
-    DECREF(folder);
-}
-
-static void
-test_Local_Open_Dir(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    DirHandle *dh = RAMFolder_Local_Open_Dir(folder);
-    TEST_TRUE(runner, dh && DH_is_a(dh, RAMDIRHANDLE),
-              "Local_Open_Dir returns a RAMDirHandle");
-    DECREF(dh);
-    DECREF(folder);
-}
-
-static void
-test_Local_Open_FileHandle(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    FileHandle *fh;
-
-    fh = RAMFolder_Local_Open_FileHandle(folder, boffo,
-                                         FH_CREATE | FH_WRITE_ONLY);
-    TEST_TRUE(runner, fh && FH_is_a(fh, RAMFILEHANDLE),
-              "opened FileHandle");
-    DECREF(fh);
-
-    fh = RAMFolder_Local_Open_FileHandle(folder, boffo,
-                                         FH_CREATE | FH_WRITE_ONLY);
-    TEST_TRUE(runner, fh && FH_is_a(fh, RAMFILEHANDLE),
-              "opened FileHandle for append");
-    DECREF(fh);
-
-    Err_set_error(NULL);
-    fh = RAMFolder_Local_Open_FileHandle(folder, boffo,
-                                         FH_CREATE | FH_WRITE_ONLY | 
FH_EXCLUSIVE);
-    TEST_TRUE(runner, fh == NULL, "FH_EXLUSIVE flag prevents open");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "failure due to FH_EXLUSIVE flag sets global error");
-
-    fh = RAMFolder_Local_Open_FileHandle(folder, boffo, FH_READ_ONLY);
-    TEST_TRUE(runner, fh && FH_is_a(fh, RAMFILEHANDLE),
-              "opened FileHandle for reading");
-    DECREF(fh);
-
-    Err_set_error(NULL);
-    fh = RAMFolder_Local_Open_FileHandle(folder, nope, FH_READ_ONLY);
-    TEST_TRUE(runner, fh == NULL,
-              "Can't open non-existent file for reading");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Opening non-existent file for reading sets global error");
-
-    DECREF(folder);
-}
-
-static void
-test_Local_Delete(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    FileHandle *fh;
-
-    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    TEST_TRUE(runner, RAMFolder_Local_Delete(folder, boffo),
-              "Local_Delete on file succeeds");
-
-    RAMFolder_Local_MkDir(folder, foo);
-    fh = RAMFolder_Open_FileHandle(folder, foo_boffo,
-                                   FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-
-    Err_set_error(NULL);
-    TEST_FALSE(runner, RAMFolder_Local_Delete(folder, foo),
-               "Local_Delete on non-empty dir fails");
-
-    RAMFolder_Delete(folder, foo_boffo);
-    TEST_TRUE(runner, RAMFolder_Local_Delete(folder, foo),
-              "Local_Delete on empty dir succeeds");
-
-    DECREF(folder);
-}
-
-static void
-test_Rename(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    FileHandle *fh;
-    bool result;
-
-    RAMFolder_MkDir(folder, foo);
-    RAMFolder_MkDir(folder, foo_bar);
-    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-
-    // Move files.
-
-    result = RAMFolder_Rename(folder, boffo, banana);
-    TEST_TRUE(runner, result, "Rename succeeds and returns true");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, banana),
-              "File exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, boffo),
-               "File no longer exists at old path");
-
-    result = RAMFolder_Rename(folder, banana, foo_bar_boffo);
-    TEST_TRUE(runner, result, "Rename to file in nested dir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
-              "File exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, banana),
-               "File no longer exists at old path");
-
-    result = RAMFolder_Rename(folder, foo_bar_boffo, boffo);
-    TEST_TRUE(runner, result, "Rename from file in nested dir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
-              "File exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
-               "File no longer exists at old path");
-
-    fh = RAMFolder_Open_FileHandle(folder, foo_boffo,
-                                   FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    result = RAMFolder_Rename(folder, boffo, foo_boffo);
-    TEST_TRUE(runner, result, "Clobber");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, boffo),
-               "File no longer exists at old path");
-
-    // Move Dirs.
-
-    RAMFolder_MkDir(folder, baz);
-    result = RAMFolder_Rename(folder, baz, boffo);
-    TEST_TRUE(runner, result, "Rename dir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
-              "Folder exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, baz),
-               "Folder no longer exists at old path");
-
-    result = RAMFolder_Rename(folder, boffo, foo_foo);
-    TEST_TRUE(runner, result, "Rename dir into nested subdir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_foo),
-              "Folder exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, boffo),
-               "Folder no longer exists at old path");
-
-    result = RAMFolder_Rename(folder, foo_foo, foo_bar_baz);
-    TEST_TRUE(runner, result, "Rename dir from nested subdir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_baz),
-              "Folder exists at new path");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, foo_foo),
-               "Folder no longer exists at old path");
-
-    // Test failed clobbers.
-
-    Err_set_error(NULL);
-    result = RAMFolder_Rename(folder, foo_boffo, foo_bar);
-    TEST_FALSE(runner, result, "Rename file clobbering dir fails");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Failed rename sets global error");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File still exists at old path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar),
-              "Dir still exists after failed clobber");
-
-    Err_set_error(NULL);
-    result = RAMFolder_Rename(folder, foo_bar, foo_boffo);
-    TEST_FALSE(runner, result, "Rename dir clobbering file fails");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Failed rename sets global error");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar),
-              "Dir still exists at old path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File still exists after failed clobber");
-
-    // Test that "renaming" succeeds where to and from are the same.
-
-    result = RAMFolder_Rename(folder, foo_boffo, foo_boffo);
-    TEST_TRUE(runner, result, "Renaming file to itself succeeds");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File still exists");
-
-    result = RAMFolder_Rename(folder, foo_bar, foo_bar);
-    TEST_TRUE(runner, result, "Renaming dir to itself succeeds");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar),
-              "Dir still exists");
-
-    // Invalid filepaths.
-
-    Err_set_error(NULL);
-    result = RAMFolder_Rename(folder, foo_boffo, nope_nyet);
-    TEST_FALSE(runner, result, "Rename into non-existent subdir fails");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Renaming into non-existent subdir sets global error");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "Entry still exists at old path");
-
-    Err_set_error(NULL);
-    result = RAMFolder_Rename(folder, nope_nyet, boffo);
-    TEST_FALSE(runner, result, "Rename non-existent file fails");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Renaming non-existent source file sets global error");
-
-    DECREF(folder);
-}
-
-static void
-test_Hard_Link(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    FileHandle *fh;
-    bool result;
-
-    RAMFolder_MkDir(folder, foo);
-    RAMFolder_MkDir(folder, foo_bar);
-    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-
-    // Link files.
-
-    result = RAMFolder_Hard_Link(folder, boffo, banana);
-    TEST_TRUE(runner, result, "Hard_Link succeeds and returns true");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, banana),
-              "File exists at new path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
-              "File still exists at old path");
-    RAMFolder_Delete(folder, boffo);
-
-    result = RAMFolder_Hard_Link(folder, banana, foo_bar_boffo);
-    TEST_TRUE(runner, result, "Hard_Link to target within nested dir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
-              "File exists at new path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, banana),
-              "File still exists at old path");
-    RAMFolder_Delete(folder, banana);
-
-    result = RAMFolder_Hard_Link(folder, foo_bar_boffo, foo_boffo);
-    TEST_TRUE(runner, result, "Hard_Link from file in nested dir");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File exists at new path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
-              "File still exists at old path");
-    RAMFolder_Delete(folder, foo_bar_boffo);
-
-    // Invalid clobbers.
-
-    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
-    DECREF(fh);
-    result = RAMFolder_Hard_Link(folder, foo_boffo, boffo);
-    TEST_FALSE(runner, result, "Clobber of file fails");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
-              "File still exists at new path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File still exists at old path");
-    RAMFolder_Delete(folder, boffo);
-
-    RAMFolder_MkDir(folder, baz);
-    result = RAMFolder_Hard_Link(folder, foo_boffo, baz);
-    TEST_FALSE(runner, result, "Clobber of dir fails");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, baz),
-              "Dir still exists at new path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File still exists at old path");
-    RAMFolder_Delete(folder, baz);
-
-    // Invalid Hard_Link of dir.
-
-    RAMFolder_MkDir(folder, baz);
-    result = RAMFolder_Hard_Link(folder, baz, banana);
-    TEST_FALSE(runner, result, "Hard_Link dir fails");
-    TEST_FALSE(runner, RAMFolder_Exists(folder, banana),
-               "Nothing at new path");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, baz),
-              "Folder still exists at old path");
-    RAMFolder_Delete(folder, baz);
-
-    // Test that linking to yourself fails.
-
-    result = RAMFolder_Hard_Link(folder, foo_boffo, foo_boffo);
-    TEST_FALSE(runner, result, "Hard_Link file to itself fails");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "File still exists");
-
-    // Invalid filepaths.
-
-    Err_set_error(NULL);
-    result = RAMFolder_Rename(folder, foo_boffo, nope_nyet);
-    TEST_FALSE(runner, result, "Hard_Link into non-existent subdir fails");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Hard_Link into non-existent subdir sets global error");
-    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
-              "Entry still exists at old path");
-
-    Err_set_error(NULL);
-    result = RAMFolder_Rename(folder, nope_nyet, boffo);
-    TEST_FALSE(runner, result, "Hard_Link non-existent source file fails");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Hard_Link non-existent source file sets global error");
-
-    DECREF(folder);
-}
-
-static void
-test_Close(TestBatchRunner *runner) {
-    RAMFolder *folder = RAMFolder_new(NULL);
-    RAMFolder_Close(folder);
-    PASS(runner, "Close() concludes without incident");
-    RAMFolder_Close(folder);
-    RAMFolder_Close(folder);
-    PASS(runner, "Calling Close() multiple times is safe");
-    DECREF(folder);
-}
-
-void
-TestRAMFolder_Run_IMP(TestRAMFolder *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 98);
-    S_init_strings();
-    test_Initialize_and_Check(runner);
-    test_Local_Exists(runner);
-    test_Local_Is_Directory(runner);
-    test_Local_Find_Folder(runner);
-    test_Local_MkDir(runner);
-    test_Local_Open_Dir(runner);
-    test_Local_Open_FileHandle(runner);
-    test_Local_Delete(runner);
-    test_Rename(runner);
-    test_Hard_Link(runner);
-    test_Close(runner);
-    S_destroy_strings();
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Store/TestRAMFolder.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Store/TestRAMFolder.cfh 
b/core/Lucy/Test/Store/TestRAMFolder.cfh
deleted file mode 100644
index 6fc392c..0000000
--- a/core/Lucy/Test/Store/TestRAMFolder.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::Store::TestRAMFolder
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestRAMFolder*
-    new();
-
-    void
-    Run(TestRAMFolder *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/TestSchema.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestSchema.c b/core/Lucy/Test/TestSchema.c
deleted file mode 100644
index 1e1c3c1..0000000
--- a/core/Lucy/Test/TestSchema.c
+++ /dev/null
@@ -1,112 +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_TESTSCHEMA
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Plan/TestArchitecture.h"
-#include "Lucy/Test/TestSchema.h"
-#include "Lucy/Analysis/StandardTokenizer.h"
-#include "Lucy/Plan/FullTextType.h"
-#include "Lucy/Plan/Architecture.h"
-#include "Lucy/Util/Freezer.h"
-
-TestSchema*
-TestSchema_new(bool use_alt_arch) {
-    TestSchema *self = (TestSchema*)Class_Make_Obj(TESTSCHEMA);
-    return TestSchema_init(self, use_alt_arch);
-}
-
-TestSchema*
-TestSchema_init(TestSchema *self, bool use_alt_arch) {
-    StandardTokenizer *tokenizer = StandardTokenizer_new();
-    FullTextType *type = FullTextType_new((Analyzer*)tokenizer);
-
-    TestSchema_IVARS(self)->use_alt_arch = use_alt_arch;
-
-    Schema_init((Schema*)self);
-    FullTextType_Set_Highlightable(type, true);
-    String *content = SSTR_WRAP_C("content");
-    TestSchema_Spec_Field(self, content, (FieldType*)type);
-    DECREF(type);
-    DECREF(tokenizer);
-
-    return self;
-}
-
-Architecture*
-TestSchema_Architecture_IMP(TestSchema *self) {
-    if (TestSchema_IVARS(self)->use_alt_arch) {
-        return Arch_new();
-    }
-    else {
-        return (Architecture*)TestArch_new();
-    }
-}
-
-TestBatchSchema*
-TestBatchSchema_new() {
-    return (TestBatchSchema*)Class_Make_Obj(TESTBATCHSCHEMA);
-}
-
-static void
-test_Equals(TestBatchRunner *runner) {
-    TestSchema *schema = TestSchema_new(false);
-    TestSchema *arch_differs = TestSchema_new(true);
-    TestSchema *spec_differs = TestSchema_new(false);
-    String     *content      = SSTR_WRAP_C("content");
-    FullTextType *type = (FullTextType*)TestSchema_Fetch_Type(spec_differs,
-                                                              content);
-
-    TEST_TRUE(runner, TestSchema_Equals(schema, (Obj*)schema), "Equals");
-
-    FullTextType_Set_Boost(type, 2.0f);
-    TEST_FALSE(runner, TestSchema_Equals(schema, (Obj*)spec_differs),
-               "Equals spoiled by differing FieldType");
-
-    TEST_FALSE(runner, TestSchema_Equals(schema, (Obj*)arch_differs),
-               "Equals spoiled by differing Architecture");
-
-    DECREF(schema);
-    DECREF(arch_differs);
-    DECREF(spec_differs);
-}
-
-static void
-test_Dump_and_Load(TestBatchRunner *runner) {
-    TestSchema *schema = TestSchema_new(false);
-    Obj        *dump   = (Obj*)TestSchema_Dump(schema);
-    TestSchema *loaded = (TestSchema*)Freezer_load(dump);
-
-    TEST_FALSE(runner, TestSchema_Equals(schema, (Obj*)loaded),
-               "Dump => Load round trip");
-
-    DECREF(schema);
-    DECREF(dump);
-    DECREF(loaded);
-}
-
-void
-TestBatchSchema_Run_IMP(TestBatchSchema *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 4);
-    test_Equals(runner);
-    test_Dump_and_Load(runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/TestSchema.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestSchema.cfh b/core/Lucy/Test/TestSchema.cfh
deleted file mode 100644
index 5cd897a..0000000
--- a/core/Lucy/Test/TestSchema.cfh
+++ /dev/null
@@ -1,48 +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;
-
-/** Schema for use by the test suite.
- *
- * Exposes problems faced by much larger indexes by using an TestArchitecture,
- * which returns absurdly low values for [](cfish:.Index_Interval) and 
[](cfish:.Skip_Interval).
- */
-
-class Lucy::Test::TestSchema inherits Lucy::Plan::Schema {
-    bool use_alt_arch;
-
-    inert incremented TestSchema*
-    new(bool use_alt_arch = false);
-
-    inert TestSchema*
-    init(TestSchema *self, bool use_alt_arch = false);
-
-    public incremented Architecture*
-    Architecture(TestSchema *self);
-}
-
-class Lucy::Test::TestBatchSchema
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestBatchSchema*
-    new();
-
-    void
-    Run(TestBatchSchema *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/TestSimple.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestSimple.c b/core/Lucy/Test/TestSimple.c
deleted file mode 100644
index 93fd747..0000000
--- a/core/Lucy/Test/TestSimple.c
+++ /dev/null
@@ -1,112 +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_TESTSIMPLE
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Lucy/Test/TestSimple.h"
-#include "Lucy/Simple.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Document/Doc.h"
-#include "Lucy/Document/HitDoc.h"
-#include "Lucy/Store/RAMFolder.h"
-
-TestSimple*
-TestSimple_new() {
-    return (TestSimple*)Class_Make_Obj(TESTSIMPLE);
-}
-
-static void
-test_simple(TestBatchRunner *runner) {
-    RAMFolder *folder   = RAMFolder_new(NULL);
-    String    *language = SSTR_WRAP_C("en");
-    Simple    *lucy     = Simple_new((Obj*)folder, language);
-
-    String *food_field = SSTR_WRAP_C("food");
-
-    {
-        Doc *doc = Doc_new(NULL, 0);
-        String *value = SSTR_WRAP_C("creamed corn");
-        Doc_Store(doc, food_field, (Obj*)value);
-        Simple_Add_Doc(lucy, doc);
-        DECREF(doc);
-
-        String *query = SSTR_WRAP_C("creamed");
-        uint32_t num_results = Simple_Search(lucy, query, 0, 10);
-        TEST_INT_EQ(runner, num_results, 1, "Search works right after add");
-    }
-
-    {
-        Doc *doc = Doc_new(NULL, 0);
-        String *value = SSTR_WRAP_C("creamed spinach");
-        Doc_Store(doc, food_field, (Obj*)value);
-        Simple_Add_Doc(lucy, doc);
-        DECREF(doc);
-
-        String *query = SSTR_WRAP_C("creamed");
-        uint32_t num_results = Simple_Search(lucy, query, 0, 10);
-        TEST_INT_EQ(runner, num_results, 2, "Search returns total hits");
-    }
-
-    {
-        Doc *doc = Doc_new(NULL, 0);
-        String *value = SSTR_WRAP_C("creamed broccoli");
-        Doc_Store(doc, food_field, (Obj*)value);
-        Simple_Add_Doc(lucy, doc);
-        DECREF(doc);
-
-        DECREF(lucy);
-        lucy = Simple_new((Obj*)folder, language);
-
-        String *query = SSTR_WRAP_C("cream");
-        uint32_t num_results = Simple_Search(lucy, query, 0, 10);
-        TEST_INT_EQ(runner, num_results, 3, "commit upon destroy");
-
-        HitDoc *hit;
-        while ((hit = Simple_Next(lucy)) != NULL) {
-            String *food = (String*)HitDoc_Extract(hit, food_field);
-            TEST_TRUE(runner, Str_Starts_With_Utf8(food, "cream", 5), "Next");
-            DECREF(food);
-            DECREF(hit);
-        }
-    }
-
-    {
-        Doc *doc = Doc_new(NULL, 0);
-        String *band_field = SSTR_WRAP_C("band");
-        String *value = SSTR_WRAP_C("Cream");
-        Doc_Store(doc, band_field, (Obj*)value);
-        Simple_Add_Doc(lucy, doc);
-        DECREF(doc);
-
-        String *query = SSTR_WRAP_C("cream");
-        uint32_t num_results = Simple_Search(lucy, query, 0, 10);
-        TEST_INT_EQ(runner, num_results, 4,
-                    "Search uses correct EasyAnalyzer");
-    }
-
-    DECREF(lucy);
-    DECREF(folder);
-}
-
-void
-TestSimple_Run_IMP(TestSimple *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 7);
-    test_simple(runner);
-}
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/TestSimple.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestSimple.cfh b/core/Lucy/Test/TestSimple.cfh
deleted file mode 100644
index 045fe8c..0000000
--- a/core/Lucy/Test/TestSimple.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::TestSimple
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestSimple*
-    new();
-
-    void
-    Run(TestSimple *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/TestUtils.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestUtils.c b/core/Lucy/Test/TestUtils.c
deleted file mode 100644
index bddfa7b..0000000
--- a/core/Lucy/Test/TestUtils.c
+++ /dev/null
@@ -1,183 +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_TESTUTILS
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-#include <string.h>
-
-#include "Lucy/Test/TestUtils.h"
-#include "Lucy/Test.h"
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Clownfish/TestHarness/TestUtils.h"
-#include "Lucy/Analysis/Analyzer.h"
-#include "Lucy/Analysis/Inversion.h"
-#include "Lucy/Analysis/Token.h"
-#include "Lucy/Search/TermQuery.h"
-#include "Lucy/Search/PhraseQuery.h"
-#include "Lucy/Search/LeafQuery.h"
-#include "Lucy/Search/ANDQuery.h"
-#include "Lucy/Search/NOTQuery.h"
-#include "Lucy/Search/ORQuery.h"
-#include "Lucy/Search/RangeQuery.h"
-#include "Lucy/Store/FSFolder.h"
-#include "Lucy/Store/InStream.h"
-#include "Lucy/Store/OutStream.h"
-#include "Lucy/Store/RAMFile.h"
-#include "Lucy/Util/Freezer.h"
-
-Vector*
-TestUtils_doc_set() {
-    Vector *docs = Vec_new(10);
-
-    Vec_Push(docs, (Obj*)TestUtils_get_str("x"));
-    Vec_Push(docs, (Obj*)TestUtils_get_str("y"));
-    Vec_Push(docs, (Obj*)TestUtils_get_str("z"));
-    Vec_Push(docs, (Obj*)TestUtils_get_str("x a"));
-    Vec_Push(docs, (Obj*)TestUtils_get_str("x a b"));
-    Vec_Push(docs, (Obj*)TestUtils_get_str("x a b c"));
-    Vec_Push(docs, (Obj*)TestUtils_get_str("x foo a b c d"));
-
-    return docs;
-}
-
-PolyQuery*
-TestUtils_make_poly_query(uint32_t boolop, ...) {
-    va_list args;
-    Query *child;
-    PolyQuery *retval;
-    Vector *children = Vec_new(0);
-
-    va_start(args, boolop);
-    while (NULL != (child = va_arg(args, Query*))) {
-        Vec_Push(children, (Obj*)child);
-    }
-    va_end(args);
-
-    retval = boolop == BOOLOP_OR
-             ? (PolyQuery*)ORQuery_new(children)
-             : (PolyQuery*)ANDQuery_new(children);
-    DECREF(children);
-    return retval;
-}
-
-TermQuery*
-TestUtils_make_term_query(const char *field, const char *term) {
-    String *field_str = SSTR_WRAP_C(field);
-    String *term_str  = SSTR_WRAP_C(term);
-    return TermQuery_new((String*)field_str, (Obj*)term_str);
-}
-
-PhraseQuery*
-TestUtils_make_phrase_query(const char *field, ...) {
-    String *field_str = SSTR_WRAP_C(field);
-    va_list args;
-    Vector *terms = Vec_new(0);
-    PhraseQuery *query;
-    char *term_str;
-
-    va_start(args, field);
-    while (NULL != (term_str = va_arg(args, char*))) {
-        Vec_Push(terms, (Obj*)TestUtils_get_str(term_str));
-    }
-    va_end(args);
-
-    query = PhraseQuery_new(field_str, terms);
-    DECREF(terms);
-    return query;
-}
-
-LeafQuery*
-TestUtils_make_leaf_query(const char *field, const char *term) {
-    String *term_str  = SSTR_WRAP_C(term);
-    String *field_str = field ? SSTR_WRAP_C(field) : NULL;
-    return LeafQuery_new(field_str, term_str);
-}
-
-NOTQuery*
-TestUtils_make_not_query(Query* negated_query) {
-    NOTQuery *not_query = NOTQuery_new(negated_query);
-    DECREF(negated_query);
-    return not_query;
-}
-
-RangeQuery*
-TestUtils_make_range_query(const char *field, const char *lower_term,
-                           const char *upper_term, bool include_lower,
-                           bool include_upper) {
-    String *f     = SSTR_WRAP_C(field);
-    String *lterm = SSTR_WRAP_C(lower_term);
-    String *uterm = SSTR_WRAP_C(upper_term);
-    return RangeQuery_new(f, (Obj*)lterm, (Obj*)uterm, include_lower,
-                          include_upper);
-}
-
-void
-TestUtils_test_analyzer(TestBatchRunner *runner, Analyzer *analyzer,
-                        String *source, Vector *expected,
-                        const char *message) {
-    Token *seed = Token_new(Str_Get_Ptr8(source), Str_Get_Size(source),
-                            0, 0, 1.0f, 1);
-    Inversion *starter = Inversion_new(seed);
-    Inversion *transformed = Analyzer_Transform(analyzer, starter);
-    Vector *got = Vec_new(1);
-    Token *token;
-    while (NULL != (token = Inversion_Next(transformed))) {
-        String *token_text
-            = Str_new_from_utf8(Token_Get_Text(token), Token_Get_Len(token));
-        Vec_Push(got, (Obj*)token_text);
-    }
-    TEST_TRUE(runner, Vec_Equals(expected, (Obj*)got),
-              "Transform(): %s", message);
-    DECREF(transformed);
-
-    transformed = Analyzer_Transform_Text(analyzer, source);
-    Vec_Clear(got);
-    while (NULL != (token = Inversion_Next(transformed))) {
-        String *token_text
-            = Str_new_from_utf8(Token_Get_Text(token), Token_Get_Len(token));
-        Vec_Push(got, (Obj*)token_text);
-    }
-    TEST_TRUE(runner, Vec_Equals(expected, (Obj*)got),
-              "Transform_Text(): %s", message);
-    DECREF(transformed);
-
-    DECREF(got);
-    got = Analyzer_Split(analyzer, source);
-    TEST_TRUE(runner, Vec_Equals(expected, (Obj*)got), "Split(): %s", message);
-
-    DECREF(got);
-    DECREF(starter);
-    DECREF(seed);
-}
-
-FSFolder*
-TestUtils_modules_folder() {
-    static const char *const paths[] = { "modules", "../modules" };
-
-    for (size_t i = 0; i < sizeof(paths) / sizeof(char*); i++) {
-        String *path = Str_newf(paths[i]);
-        FSFolder *modules_folder = FSFolder_new(path);
-        DECREF(path);
-        if (FSFolder_Check(modules_folder)) {
-            return modules_folder;
-        }
-        DECREF(modules_folder);
-    }
-
-    return NULL;
-}
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/TestUtils.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/TestUtils.cfh b/core/Lucy/Test/TestUtils.cfh
deleted file mode 100644
index 0d3e15c..0000000
--- a/core/Lucy/Test/TestUtils.cfh
+++ /dev/null
@@ -1,87 +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;
-
-inert class Lucy::Test::TestUtils  {
-
-    /** Return a Vector of Strings, each representing the content for a
-     * document in the shared collection.
-     */
-    inert incremented Vector*
-    doc_set();
-
-    /** Testing-only TermQuery factory.
-     */
-    inert incremented TermQuery*
-    make_term_query(const char *field, const char *term);
-
-    /** Testing-only PhraseQuery factory.
-     */
-    inert incremented PhraseQuery*
-    make_phrase_query(const char *field, ...);
-
-    /** Testing-only LeafQuery factory.
-     */
-    inert incremented LeafQuery*
-    make_leaf_query(const char *field, const char *term);
-
-    /** Return a new NOTQuery, decrementing the refcount for
-     * `negated_query`.
-     */
-    inert incremented NOTQuery*
-    make_not_query(Query *negated_query);
-
-    inert incremented RangeQuery*
-    make_range_query(const char *field, const char *lower_term = NULL,
-                     const char *upper_term = NULL,
-                     bool include_lower = true,
-                     bool include_upper = true);
-
-    /** Return either an ORQuery or an ANDQuery depending on the value of
-     * `boolop`.  Takes a NULL-terminated list of Query objects.
-     * Decrements the refcounts of all supplied children, under the assumption
-     * that they were created solely for inclusion within the aggregate query.
-     */
-    inert incremented PolyQuery*
-    make_poly_query(uint32_t boolop, ...);
-
-    /** Verify an Analyzer's transform, transform_text, and split methods.
-     */
-    inert void
-    test_analyzer(TestBatchRunner *runner, Analyzer *analyzer, String *source,
-                  Vector *expected, const char *message);
-
-    /** Return the "modules" folder.
-     *
-     * If the folder cannot be found, return NULL.
-     */
-    inert incremented nullable FSFolder*
-    modules_folder();
-}
-
-__C__
-
-#define LUCY_TESTUTILS_BOOLOP_OR  1
-#define LUCY_TESTUTILS_BOOLOP_AND 2
-#ifdef LUCY_USE_SHORT_NAMES
-  #define BOOLOP_OR        LUCY_TESTUTILS_BOOLOP_OR
-  #define BOOLOP_AND       LUCY_TESTUTILS_BOOLOP_AND
-#endif
-
-__END_C__
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestFreezer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestFreezer.c 
b/core/Lucy/Test/Util/TestFreezer.c
deleted file mode 100644
index 2cfba78..0000000
--- a/core/Lucy/Test/Util/TestFreezer.c
+++ /dev/null
@@ -1,178 +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 <string.h>
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/Blob.h"
-#include "Clownfish/Boolean.h"
-#include "Clownfish/Num.h"
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Clownfish/TestHarness/TestUtils.h"
-#include "Lucy/Test/Util/TestFreezer.h"
-#include "Lucy/Store/InStream.h"
-#include "Lucy/Store/OutStream.h"
-#include "Lucy/Store/RAMFile.h"
-#include "Lucy/Util/Freezer.h"
-
-TestFreezer*
-TestFreezer_new() {
-    return (TestFreezer*)Class_Make_Obj(TESTFREEZER);
-}
-
-// Return the result of round-tripping the object through FREEZE and THAW.
-static Obj*
-S_freeze_thaw(Obj *object) {
-    if (object) {
-        RAMFile *ram_file = RAMFile_new(NULL, false);
-        OutStream *outstream = OutStream_open((Obj*)ram_file);
-        FREEZE(object, outstream);
-        OutStream_Close(outstream);
-        DECREF(outstream);
-
-        InStream *instream = InStream_open((Obj*)ram_file);
-        Obj *retval = THAW(instream);
-        DECREF(instream);
-        DECREF(ram_file);
-        return retval;
-    }
-    else {
-        return NULL;
-    }
-}
-
-// Return the result of round-tripping the object through dump() and load().
-static Obj*
-S_dump_load(Obj *object) {
-    if (object) {
-        Obj *dump = Freezer_dump(object);
-        Obj *loaded = Freezer_load(dump);
-        DECREF(dump);
-        return loaded;
-    }
-    else {
-        return NULL;
-    }
-}
-
-static void
-test_blob(TestBatchRunner *runner) {
-    Blob *wanted = Blob_new("foobar", 6);
-    Blob *got    = (Blob*)S_freeze_thaw((Obj*)wanted);
-    TEST_TRUE(runner, got && Blob_Equals(wanted, (Obj*)got),
-              "Serialization round trip");
-    DECREF(wanted);
-    DECREF(got);
-}
-
-static void
-test_string(TestBatchRunner *runner) {
-    String *wanted = TestUtils_get_str("foo");
-    String *got    = (String*)S_freeze_thaw((Obj*)wanted);
-    TEST_TRUE(runner, got && Str_Equals(wanted, (Obj*)got),
-              "Round trip through FREEZE/THAW");
-    DECREF(got);
-    DECREF(wanted);
-}
-
-static void
-test_hash(TestBatchRunner *runner) {
-    Hash  *wanted = Hash_new(0);
-
-    for (uint32_t i = 0; i < 10; i++) {
-        String *str = TestUtils_random_string(rand() % 1200);
-        Integer *num = Int_new(i);
-        Hash_Store(wanted, str, (Obj*)num);
-        DECREF(str);
-    }
-
-    {
-        Hash *got = (Hash*)S_freeze_thaw((Obj*)wanted);
-        TEST_TRUE(runner, got && Hash_Equals(wanted, (Obj*)got),
-                  "Round trip through serialization.");
-        DECREF(got);
-    }
-
-    {
-        Obj *got = S_dump_load((Obj*)wanted);
-        TEST_TRUE(runner, Hash_Equals(wanted, got),
-                  "Dump => Load round trip");
-        DECREF(got);
-    }
-
-    DECREF(wanted);
-}
-
-static void
-test_num(TestBatchRunner *runner) {
-    Float   *f64 = Float_new(1.33);
-    Integer *i64 = Int_new(-1);
-    Float   *f64_thaw = (Float*)S_freeze_thaw((Obj*)f64);
-    Integer *i64_thaw = (Integer*)S_freeze_thaw((Obj*)i64);
-
-    TEST_TRUE(runner, Float_Equals(f64, (Obj*)f64_thaw),
-              "Float freeze/thaw");
-    TEST_TRUE(runner, Int_Equals(i64, (Obj*)i64_thaw),
-              "Integer freeze/thaw");
-
-#ifdef LUCY_VALGRIND
-    SKIP(runner, 1, "known leaks");
-#else
-    Boolean *true_thaw = (Boolean*)S_freeze_thaw((Obj*)CFISH_TRUE);
-    TEST_TRUE(runner, Bool_Equals(CFISH_TRUE, (Obj*)true_thaw),
-              "Boolean freeze/thaw");
-#endif
-
-    DECREF(i64_thaw);
-    DECREF(f64_thaw);
-    DECREF(i64);
-    DECREF(f64);
-}
-
-static void
-test_varray(TestBatchRunner *runner) {
-    Vector *array = Vec_new(0);
-    Vec_Store(array, 1, (Obj*)Str_newf("foo"));
-    Vec_Store(array, 3, (Obj*)Str_newf("bar"));
-
-    {
-        Obj *got = S_freeze_thaw((Obj*)array);
-        TEST_TRUE(runner, got && Vec_Equals(array, got),
-                  "Round trip through FREEZE/THAW");
-        DECREF(got);
-    }
-
-    {
-        Obj *got = S_dump_load((Obj*)array);
-        TEST_TRUE(runner, got && Vec_Equals(array, got),
-                  "Dump => Load round trip");
-        DECREF(got);
-    }
-
-    DECREF(array);
-}
-
-void
-TestFreezer_Run_IMP(TestFreezer *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 9);
-    test_blob(runner);
-    test_string(runner);
-    test_hash(runner);
-    test_num(runner);
-    test_varray(runner);
-}
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestFreezer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestFreezer.cfh 
b/core/Lucy/Test/Util/TestFreezer.cfh
deleted file mode 100644
index 4e7cd90..0000000
--- a/core/Lucy/Test/Util/TestFreezer.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::Util::TestFreezer
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestFreezer*
-    new();
-
-    void
-    Run(TestFreezer *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestIndexFileNames.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestIndexFileNames.c 
b/core/Lucy/Test/Util/TestIndexFileNames.c
deleted file mode 100644
index a9d5708..0000000
--- a/core/Lucy/Test/Util/TestIndexFileNames.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 TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Util/TestIndexFileNames.h"
-#include "Lucy/Util/IndexFileNames.h"
-
-TestIndexFileNames*
-TestIxFileNames_new() {
-    return (TestIndexFileNames*)Class_Make_Obj(TESTINDEXFILENAMES);
-}
-
-static void
-S_test_local_part(TestBatchRunner *runner, const char *source,
-                  const char *wanted, const char *test_name) {
-    String *source_str = SSTR_WRAP_C(source);
-    String *got = IxFileNames_local_part(source_str);
-    TEST_TRUE(runner, Str_Equals_Utf8(got, wanted, strlen(wanted)), test_name);
-    DECREF(got);
-}
-
-static void
-test_local_part(TestBatchRunner *runner) {
-    S_test_local_part(runner, "", "", "simple name");
-    S_test_local_part(runner, "foo.txt", "foo.txt", "name with extension");
-    S_test_local_part(runner, "/foo", "foo", "strip leading slash");
-    S_test_local_part(runner, "/foo/", "foo", "strip trailing slash");
-    S_test_local_part(runner, "foo/bar\\ ", "bar\\ ",
-                      "Include garbage like backslashes and spaces");
-    S_test_local_part(runner, "foo/bar/baz.txt", "baz.txt",
-                      "find last component");
-}
-
-static void
-S_test_extract_gen(TestBatchRunner *runner, const char *name, uint64_t gen,
-                   const char *test_name) {
-    String *source = SSTR_WRAP_C(name);
-    TEST_TRUE(runner, IxFileNames_extract_gen(source) == gen, test_name);
-}
-
-static void
-test_extract_gen(TestBatchRunner *runner) {
-    S_test_extract_gen(runner, "seg_9", 9, "extract_gen");
-    S_test_extract_gen(runner, "seg_9/", 9, "deal with trailing slash");
-    S_test_extract_gen(runner, "seg_9_8", 9, "Only go past first underscore");
-    S_test_extract_gen(runner, "snapshot_5.json", 5, "Deal with file suffix");
-}
-
-void
-TestIxFileNames_Run_IMP(TestIndexFileNames *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 10);
-    test_local_part(runner);
-    test_extract_gen(runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestIndexFileNames.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestIndexFileNames.cfh 
b/core/Lucy/Test/Util/TestIndexFileNames.cfh
deleted file mode 100644
index c5ec962..0000000
--- a/core/Lucy/Test/Util/TestIndexFileNames.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::Util::TestIndexFileNames nickname TestIxFileNames
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestIndexFileNames*
-    new();
-
-    void
-    Run(TestIndexFileNames *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestJson.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestJson.c b/core/Lucy/Test/Util/TestJson.c
deleted file mode 100644
index c67e292..0000000
--- a/core/Lucy/Test/Util/TestJson.c
+++ /dev/null
@@ -1,365 +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 <string.h>
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/Num.h"
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Util/TestJson.h"
-#include "Lucy/Util/Json.h"
-#include "Lucy/Store/FileHandle.h"
-#include "Lucy/Store/RAMFolder.h"
-
-TestJson*
-TestJson_new() {
-    return (TestJson*)Class_Make_Obj(TESTJSON);
-}
-
-// Create a test data structure including at least one each of Hash, Vector,
-// and String.
-static Obj*
-S_make_dump() {
-    Hash *dump = Hash_new(0);
-    Hash_Store_Utf8(dump, "foo", 3, (Obj*)Str_newf("foo"));
-    Hash_Store_Utf8(dump, "stuff", 5, (Obj*)Vec_new(0));
-    return (Obj*)dump;
-}
-
-static void
-test_tolerance(TestBatchRunner *runner) {
-    String *foo = Str_newf("foo");
-    String *not_json = Json_to_json((Obj*)foo);
-    TEST_TRUE(runner, not_json == NULL,
-              "to_json returns NULL when fed invalid data type");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "to_json sets global error when fed invalid data type");
-    DECREF(foo);
-}
-
-// Test escapes for control characters ASCII 0-31.
-static const char* control_escapes[] = {
-    "\\u0000",
-    "\\u0001",
-    "\\u0002",
-    "\\u0003",
-    "\\u0004",
-    "\\u0005",
-    "\\u0006",
-    "\\u0007",
-    "\\b",
-    "\\t",
-    "\\n",
-    "\\u000b",
-    "\\f",
-    "\\r",
-    "\\u000e",
-    "\\u000f",
-    "\\u0010",
-    "\\u0011",
-    "\\u0012",
-    "\\u0013",
-    "\\u0014",
-    "\\u0015",
-    "\\u0016",
-    "\\u0017",
-    "\\u0018",
-    "\\u0019",
-    "\\u001a",
-    "\\u001b",
-    "\\u001c",
-    "\\u001d",
-    "\\u001e",
-    "\\u001f",
-    NULL
-};
-
-// Test quote and backslash escape in isolation, then in context.
-static const char* quote_escapes_source[] = {
-    "\"",
-    "\\",
-    "abc\"",
-    "abc\\",
-    "\"xyz",
-    "\\xyz",
-    "\\\"",
-    "\"\\",
-    NULL
-};
-static const char* quote_escapes_json[] = {
-    "\\\"",
-    "\\\\",
-    "abc\\\"",
-    "abc\\\\",
-    "\\\"xyz",
-    "\\\\xyz",
-    "\\\\\\\"",
-    "\\\"\\\\",
-    NULL
-};
-
-static void
-test_escapes(TestBatchRunner *runner) {
-    for (int i = 0; control_escapes[i] != NULL; i++) {
-        String     *string  = Str_new_from_char(i);
-        const char *escaped = control_escapes[i];
-        String     *json    = Json_to_json((Obj*)string);
-        String     *trimmed = Str_Trim(json);
-        String     *decoded = (String*)Json_from_json(json);
-
-        String *json_wanted = Str_newf("\"%s\"", escaped);
-        TEST_TRUE(runner, Str_Equals(json_wanted, (Obj*)trimmed),
-                  "encode control escape: %s", escaped);
-
-        TEST_TRUE(runner, decoded != NULL && Str_Equals(string, (Obj*)decoded),
-                  "decode control escape: %s", escaped);
-
-        DECREF(string);
-        DECREF(json);
-        DECREF(trimmed);
-        DECREF(decoded);
-        DECREF(json_wanted);
-    }
-
-    for (int i = 0; quote_escapes_source[i] != NULL; i++) {
-        const char *source  = quote_escapes_source[i];
-        const char *escaped = quote_escapes_json[i];
-        String *string  = Str_new_from_utf8(source, strlen(source));
-        String *json    = Json_to_json((Obj*)string);
-        String *trimmed = Str_Trim(json);
-        String *decoded = (String*)Json_from_json(json);
-
-        String *json_wanted = Str_newf("\"%s\"", escaped);
-        TEST_TRUE(runner, Str_Equals(json_wanted, (Obj*)trimmed),
-                  "encode quote/backslash escapes: %s", source);
-
-        TEST_TRUE(runner, decoded != NULL && Str_Equals(string, (Obj*)decoded),
-                  "decode quote/backslash escapes: %s", source);
-
-        DECREF(string);
-        DECREF(json);
-        DECREF(trimmed);
-        DECREF(decoded);
-        DECREF(json_wanted);
-    }
-}
-
-static void
-test_numbers(TestBatchRunner *runner) {
-    Integer *i64     = Int_new(33);
-    String  *json    = Json_to_json((Obj*)i64);
-    String  *trimmed = Str_Trim(json);
-    TEST_TRUE(runner, Str_Equals_Utf8(trimmed, "33", 2), "Integer");
-    DECREF(json);
-    DECREF(trimmed);
-
-    Float *f64 = Float_new(33.33);
-    json = Json_to_json((Obj*)f64);
-    if (json) {
-        double value = Str_To_F64(json);
-        double diff = 33.33 - value;
-        if (diff < 0.0) { diff = 0.0 - diff; }
-        TEST_TRUE(runner, diff < 0.0001, "Float");
-        DECREF(json);
-    }
-    else {
-        FAIL(runner, "Float conversion to  json  failed.");
-    }
-
-    DECREF(i64);
-    DECREF(f64);
-}
-
-static void
-test_to_and_from(TestBatchRunner *runner) {
-    Obj *dump = S_make_dump();
-    String *json = Json_to_json(dump);
-    Obj *got = Json_from_json(json);
-    TEST_TRUE(runner, got != NULL && Obj_Equals(dump, got),
-              "Round trip through to_json and from_json");
-    DECREF(dump);
-    DECREF(json);
-    DECREF(got);
-}
-
-static void
-test_spew_and_slurp(TestBatchRunner *runner) {
-    Obj *dump = S_make_dump();
-    Folder *folder = (Folder*)RAMFolder_new(NULL);
-
-    String *foo = SSTR_WRAP_C("foo");
-    bool result = Json_spew_json(dump, folder, foo);
-    TEST_TRUE(runner, result, "spew_json returns true on success");
-    TEST_TRUE(runner, Folder_Exists(folder, foo),
-              "spew_json wrote file");
-
-    Obj *got = Json_slurp_json(folder, foo);
-    TEST_TRUE(runner, got && Obj_Equals(dump, got),
-              "Round trip through spew_json and slurp_json");
-    DECREF(got);
-
-    Err_set_error(NULL);
-    result = Json_spew_json(dump, folder, foo);
-    TEST_FALSE(runner, result, "Can't spew_json when file exists");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Failed spew_json sets global error");
-
-    Err_set_error(NULL);
-    String *bar = SSTR_WRAP_C("bar");
-    got = Json_slurp_json(folder, bar);
-    TEST_TRUE(runner, got == NULL,
-              "slurp_json returns NULL when file doesn't exist");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Failed slurp_json sets global error");
-
-    String *boffo = SSTR_WRAP_C("boffo");
-
-    FileHandle *fh
-        = Folder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
-    FH_Write(fh, "garbage", 7);
-    DECREF(fh);
-
-    Err_set_error(NULL);
-    got = Json_slurp_json(folder, boffo);
-    TEST_TRUE(runner, got == NULL,
-              "slurp_json returns NULL when file doesn't contain valid JSON");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "Failed slurp_json sets global error");
-    DECREF(got);
-
-    DECREF(dump);
-    DECREF(folder);
-}
-
-static void
-S_verify_bad_syntax(TestBatchRunner *runner, const char *bad, const char 
*mess) {
-    String *has_errors = SSTR_WRAP_C(bad);
-    Err_set_error(NULL);
-    Obj *not_json = Json_from_json(has_errors);
-    TEST_TRUE(runner, not_json == NULL, "from_json returns NULL: %s", mess);
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "from_json sets global error: %s", mess);
-}
-
-static void
-test_syntax_errors(TestBatchRunner *runner) {
-    S_verify_bad_syntax(runner, "[", "unclosed left bracket");
-    S_verify_bad_syntax(runner, "]", "unopened right bracket");
-    S_verify_bad_syntax(runner, "{", "unclosed left curly");
-    S_verify_bad_syntax(runner, "}", "unopened right curly");
-    S_verify_bad_syntax(runner, "{}[]", "two top-level objects");
-    S_verify_bad_syntax(runner, "[1 \"foo\"]", "missing comma in array");
-    S_verify_bad_syntax(runner, "[1, \"foo\",]", "extra comma in array");
-    S_verify_bad_syntax(runner, "{\"1\":1 \"2\":2}", "missing comma in hash");
-    S_verify_bad_syntax(runner, "{\"1\":1,\"2\":2,}", "extra comma in hash");
-    S_verify_bad_syntax(runner, "\"1", "unterminated string");
-    // Tolerated by strtod().
-    // S_verify_bad_syntax(runner, "1. ", "float missing fraction");
-    // S_verify_bad_syntax(runner, "-.3 ", "Number missing integral part");
-    S_verify_bad_syntax(runner, "-. ", "Number missing any digits");
-    S_verify_bad_syntax(runner, "+1.0 ", "float with prepended plus");
-    S_verify_bad_syntax(runner, "\"\\g\"", "invalid char escape");
-    S_verify_bad_syntax(runner, "\"\\uAAAZ\"", "invalid \\u escape");
-}
-
-static void
-S_round_trip_integer(TestBatchRunner *runner, int64_t value) {
-    Integer *num = Int_new(value);
-    Vector *array = Vec_new(1);
-    Vec_Store(array, 0, (Obj*)num);
-    String *json = Json_to_json((Obj*)array);
-    Obj *dump = Json_from_json(json);
-    TEST_TRUE(runner, Vec_Equals(array, dump), "Round trip integer %ld",
-              (long)value);
-    DECREF(dump);
-    DECREF(json);
-    DECREF(array);
-}
-
-static void
-test_integers(TestBatchRunner *runner) {
-    S_round_trip_integer(runner, 0);
-    S_round_trip_integer(runner, -1);
-    S_round_trip_integer(runner, -1000000);
-    S_round_trip_integer(runner, 1000000);
-}
-
-static void
-S_round_trip_float(TestBatchRunner *runner, double value, double max_diff) {
-    Float *num = Float_new(value);
-    Vector *array = Vec_new(1);
-    Vec_Store(array, 0, (Obj*)num);
-    String *json = Json_to_json((Obj*)array);
-    Obj *dump = CERTIFY(Json_from_json(json), VECTOR);
-    Float *got = (Float*)CERTIFY(Vec_Fetch((Vector*)dump, 0), FLOAT);
-    double diff = Float_Get_Value(num) - Float_Get_Value(got);
-    if (diff < 0) { diff = 0 - diff; }
-    TEST_TRUE(runner, diff <= max_diff, "Round trip float %f", value);
-    DECREF(dump);
-    DECREF(json);
-    DECREF(array);
-}
-
-static void
-test_floats(TestBatchRunner *runner) {
-    S_round_trip_float(runner, 0.0, 0.0);
-    S_round_trip_float(runner, 0.1, 0.00001);
-    S_round_trip_float(runner, -0.1, 0.00001);
-    S_round_trip_float(runner, 1000000.5, 1.0);
-    S_round_trip_float(runner, -1000000.5, 1.0);
-}
-
-static void
-test_max_depth(TestBatchRunner *runner) {
-    Hash *circular = Hash_new(0);
-    Hash_Store_Utf8(circular, "circular", 8, INCREF(circular));
-    Err_set_error(NULL);
-    String *not_json = Json_to_json((Obj*)circular);
-    TEST_TRUE(runner, not_json == NULL,
-              "to_json returns NULL when fed recursing data");
-    TEST_TRUE(runner, Err_get_error() != NULL,
-              "to_json sets global error when fed recursing data");
-    DECREF(Hash_Delete_Utf8(circular, "circular", 8));
-    DECREF(circular);
-}
-
-void
-TestJson_Run_IMP(TestJson *self, TestBatchRunner *runner) {
-    uint32_t num_tests = 105;
-#ifndef LUCY_VALGRIND
-    num_tests += 28; // FIXME: syntax errors leak memory.
-#endif
-    TestBatchRunner_Plan(runner, (TestBatch*)self, num_tests);
-
-    // Test tolerance, then liberalize for testing.
-    test_tolerance(runner);
-    Json_set_tolerant(true);
-
-    test_to_and_from(runner);
-    test_escapes(runner);
-    test_numbers(runner);
-    test_spew_and_slurp(runner);
-    test_integers(runner);
-    test_floats(runner);
-    test_max_depth(runner);
-
-#ifndef LUCY_VALGRIND
-    test_syntax_errors(runner);
-#endif
-}
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestJson.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestJson.cfh b/core/Lucy/Test/Util/TestJson.cfh
deleted file mode 100644
index ddba309..0000000
--- a/core/Lucy/Test/Util/TestJson.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::Util::TestJson
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestJson*
-    new();
-
-    void
-    Run(TestJson *self, TestBatchRunner *runner);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestMemoryPool.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestMemoryPool.c 
b/core/Lucy/Test/Util/TestMemoryPool.c
deleted file mode 100644
index 7e960ab..0000000
--- a/core/Lucy/Test/Util/TestMemoryPool.c
+++ /dev/null
@@ -1,61 +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_TESTMEMORYPOOL
-#define C_LUCY_MEMORYPOOL
-#define TESTLUCY_USE_SHORT_NAMES
-#include "Lucy/Util/ToolSet.h"
-
-#include "Clownfish/TestHarness/TestBatchRunner.h"
-#include "Lucy/Test.h"
-#include "Lucy/Test/Util/TestMemoryPool.h"
-#include "Lucy/Util/MemoryPool.h"
-
-TestMemoryPool*
-TestMemPool_new() {
-    return (TestMemoryPool*)Class_Make_Obj(TESTMEMORYPOOL);
-}
-
-void
-TestMemPool_Run_IMP(TestMemoryPool *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 5);
-
-    MemoryPool *mem_pool = MemPool_new(0);
-    MemoryPoolIVARS *const ivars = MemPool_IVARS(mem_pool);
-    char *ptr_a, *ptr_b;
-
-    ptr_a = (char*)MemPool_Grab(mem_pool, 10);
-    size_t expected = sizeof(void*) == 8 ? 16 : 12;
-    TEST_UINT_EQ(runner, MemPool_Get_Consumed(mem_pool), expected,
-                 "Round up allocation to word size");
-    ptr_b = (char*)MemPool_Grab(mem_pool, 10);
-    TEST_UINT_EQ(runner, MemPool_Get_Consumed(mem_pool), expected * 2,
-                 "Accumulate consumed.");
-
-    ptr_a = ivars->buf;
-    MemPool_Resize(mem_pool, ptr_b, 6);
-    TEST_TRUE(runner, ivars->buf < ptr_a, "Resize adjusts next allocation");
-    TEST_TRUE(runner, MemPool_Get_Consumed(mem_pool) < expected * 2,
-                "Resize() adjusts `consumed`");
-
-    MemPool_Release_All(mem_pool);
-    TEST_UINT_EQ(runner, MemPool_Get_Consumed(mem_pool), 0,
-                 "Release_All() resets `consumed`");
-
-    DECREF(mem_pool);
-}
-
-

http://git-wip-us.apache.org/repos/asf/lucy/blob/572d3564/core/Lucy/Test/Util/TestMemoryPool.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Util/TestMemoryPool.cfh 
b/core/Lucy/Test/Util/TestMemoryPool.cfh
deleted file mode 100644
index f3d2433..0000000
--- a/core/Lucy/Test/Util/TestMemoryPool.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::Util::TestMemoryPool nickname TestMemPool
-    inherits Clownfish::TestHarness::TestBatch {
-
-    inert incremented TestMemoryPool*
-    new();
-
-    void
-    Run(TestMemoryPool *self, TestBatchRunner *runner);
-}
-
-

Reply via email to