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 2013/02/18 20:50:20 UTC

[lucy-commits] [3/9] git commit: refs/heads/clownfish-test-v2 - Refactor core tests

Refactor core tests

Most of the refactoring was automated using a Perl script.


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

Branch: refs/heads/clownfish-test-v2
Commit: c6b07c3ab8f16ec1eb4105bc9e6854075c5ba0c1
Parents: 4857ea7
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Feb 18 01:56:01 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Feb 18 20:13:33 2013 +0100

----------------------------------------------------------------------
 core/Lucy/Test.c                                   |  137 +++++++++
 core/Lucy/Test/Analysis/TestAnalyzer.c             |   20 +-
 core/Lucy/Test/Analysis/TestAnalyzer.cfh           |   14 +-
 core/Lucy/Test/Analysis/TestCaseFolder.c           |   20 +-
 core/Lucy/Test/Analysis/TestCaseFolder.cfh         |   14 +-
 core/Lucy/Test/Analysis/TestNormalizer.c           |   20 +-
 core/Lucy/Test/Analysis/TestNormalizer.cfh         |   14 +-
 core/Lucy/Test/Analysis/TestPolyAnalyzer.c         |   20 +-
 core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh       |   14 +-
 core/Lucy/Test/Analysis/TestRegexTokenizer.c       |   20 +-
 core/Lucy/Test/Analysis/TestRegexTokenizer.cfh     |   14 +-
 core/Lucy/Test/Analysis/TestSnowballStemmer.c      |   20 +-
 core/Lucy/Test/Analysis/TestSnowballStemmer.cfh    |   14 +-
 core/Lucy/Test/Analysis/TestSnowballStopFilter.c   |   20 +-
 core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh |   14 +-
 core/Lucy/Test/Analysis/TestStandardTokenizer.c    |   20 +-
 core/Lucy/Test/Analysis/TestStandardTokenizer.cfh  |   14 +-
 core/Lucy/Test/Highlight/TestHeatMap.c             |    1 -
 core/Lucy/Test/Highlight/TestHighlighter.c         |   20 +-
 core/Lucy/Test/Highlight/TestHighlighter.cfh       |   14 +-
 core/Lucy/Test/Index/TestDocWriter.c               |   17 +-
 core/Lucy/Test/Index/TestDocWriter.cfh             |   14 +-
 core/Lucy/Test/Index/TestHighlightWriter.c         |   17 +-
 core/Lucy/Test/Index/TestHighlightWriter.cfh       |   14 +-
 core/Lucy/Test/Index/TestIndexManager.c            |   17 +-
 core/Lucy/Test/Index/TestIndexManager.cfh          |   14 +-
 core/Lucy/Test/Index/TestPolyReader.c              |   19 +-
 core/Lucy/Test/Index/TestPolyReader.cfh            |   14 +-
 core/Lucy/Test/Index/TestPostingListWriter.c       |   17 +-
 core/Lucy/Test/Index/TestPostingListWriter.cfh     |   14 +-
 core/Lucy/Test/Index/TestSegWriter.c               |   17 +-
 core/Lucy/Test/Index/TestSegWriter.cfh             |   13 +-
 core/Lucy/Test/Index/TestSegment.c                 |   19 +-
 core/Lucy/Test/Index/TestSegment.cfh               |   14 +-
 core/Lucy/Test/Index/TestSnapshot.c                |   17 +-
 core/Lucy/Test/Index/TestSnapshot.cfh              |   14 +-
 core/Lucy/Test/Index/TestTermInfo.c                |   18 +-
 core/Lucy/Test/Index/TestTermInfo.cfh              |   14 +-
 core/Lucy/Test/Object/TestBitVector.c              |   19 +-
 core/Lucy/Test/Object/TestBitVector.cfh            |   14 +-
 core/Lucy/Test/Object/TestByteBuf.c                |   19 +-
 core/Lucy/Test/Object/TestByteBuf.cfh              |   12 +-
 core/Lucy/Test/Object/TestCharBuf.c                |   19 +-
 core/Lucy/Test/Object/TestCharBuf.cfh              |   12 +-
 core/Lucy/Test/Object/TestErr.c                    |   19 +-
 core/Lucy/Test/Object/TestErr.cfh                  |   14 +-
 core/Lucy/Test/Object/TestHash.c                   |   20 +-
 core/Lucy/Test/Object/TestHash.cfh                 |   14 +-
 core/Lucy/Test/Object/TestI32Array.c               |   19 +-
 core/Lucy/Test/Object/TestI32Array.cfh             |   14 +-
 core/Lucy/Test/Object/TestLockFreeRegistry.c       |   19 +-
 core/Lucy/Test/Object/TestLockFreeRegistry.cfh     |   14 +-
 core/Lucy/Test/Object/TestNum.c                    |   19 +-
 core/Lucy/Test/Object/TestNum.cfh                  |   14 +-
 core/Lucy/Test/Object/TestObj.c                    |   20 +-
 core/Lucy/Test/Object/TestObj.cfh                  |   14 +-
 core/Lucy/Test/Object/TestVArray.c                 |   20 +-
 core/Lucy/Test/Object/TestVArray.cfh               |   14 +-
 core/Lucy/Test/Plan/TestBlobType.c                 |   17 +-
 core/Lucy/Test/Plan/TestBlobType.cfh               |   14 +-
 core/Lucy/Test/Plan/TestFieldMisc.c                |   17 +-
 core/Lucy/Test/Plan/TestFieldMisc.cfh              |   14 +-
 core/Lucy/Test/Plan/TestFieldType.c                |   17 +-
 core/Lucy/Test/Plan/TestFieldType.cfh              |   14 +-
 core/Lucy/Test/Plan/TestFullTextType.c             |   17 +-
 core/Lucy/Test/Plan/TestFullTextType.cfh           |   14 +-
 core/Lucy/Test/Plan/TestNumericType.c              |   17 +-
 core/Lucy/Test/Plan/TestNumericType.cfh            |   14 +-
 core/Lucy/Test/Search/TestLeafQuery.c              |   17 +-
 core/Lucy/Test/Search/TestLeafQuery.cfh            |   14 +-
 core/Lucy/Test/Search/TestMatchAllQuery.c          |   17 +-
 core/Lucy/Test/Search/TestMatchAllQuery.cfh        |   14 +-
 core/Lucy/Test/Search/TestNOTQuery.c               |   17 +-
 core/Lucy/Test/Search/TestNOTQuery.cfh             |   14 +-
 core/Lucy/Test/Search/TestNoMatchQuery.c           |   17 +-
 core/Lucy/Test/Search/TestNoMatchQuery.cfh         |   14 +-
 core/Lucy/Test/Search/TestPhraseQuery.c            |   17 +-
 core/Lucy/Test/Search/TestPhraseQuery.cfh          |   14 +-
 core/Lucy/Test/Search/TestPolyQuery.c              |   34 ++-
 core/Lucy/Test/Search/TestPolyQuery.cfh            |   28 ++-
 core/Lucy/Test/Search/TestQueryParserLogic.c       |   18 +-
 core/Lucy/Test/Search/TestQueryParserLogic.cfh     |   14 +-
 core/Lucy/Test/Search/TestRangeQuery.c             |   17 +-
 core/Lucy/Test/Search/TestRangeQuery.cfh           |   14 +-
 core/Lucy/Test/Search/TestReqOptQuery.c            |   17 +-
 core/Lucy/Test/Search/TestReqOptQuery.cfh          |   14 +-
 core/Lucy/Test/Search/TestSeriesMatcher.c          |   17 +-
 core/Lucy/Test/Search/TestSeriesMatcher.cfh        |   14 +-
 core/Lucy/Test/Search/TestSortSpec.c               |   17 +-
 core/Lucy/Test/Search/TestSortSpec.cfh             |   14 +-
 core/Lucy/Test/Search/TestSpan.c                   |   18 +-
 core/Lucy/Test/Search/TestSpan.cfh                 |   14 +-
 core/Lucy/Test/Search/TestTermQuery.c              |   17 +-
 core/Lucy/Test/Search/TestTermQuery.cfh            |   14 +-
 core/Lucy/Test/Store/TestCompoundFileReader.c      |   19 +-
 core/Lucy/Test/Store/TestCompoundFileReader.cfh    |   15 +-
 core/Lucy/Test/Store/TestCompoundFileWriter.c      |   19 +-
 core/Lucy/Test/Store/TestCompoundFileWriter.cfh    |   15 +-
 core/Lucy/Test/Store/TestFSDirHandle.c             |   19 +-
 core/Lucy/Test/Store/TestFSDirHandle.cfh           |   14 +-
 core/Lucy/Test/Store/TestFSFileHandle.c            |   19 +-
 core/Lucy/Test/Store/TestFSFileHandle.cfh          |   14 +-
 core/Lucy/Test/Store/TestFSFolder.c                |   21 +-
 core/Lucy/Test/Store/TestFSFolder.cfh              |   14 +-
 core/Lucy/Test/Store/TestFileHandle.c              |   22 +-
 core/Lucy/Test/Store/TestFileHandle.cfh            |   14 +-
 core/Lucy/Test/Store/TestFolder.c                  |   19 +-
 core/Lucy/Test/Store/TestFolder.cfh                |   14 +-
 core/Lucy/Test/Store/TestIOChunks.c                |   20 +-
 core/Lucy/Test/Store/TestIOChunks.cfh              |   14 +-
 core/Lucy/Test/Store/TestIOPrimitives.c            |   20 +-
 core/Lucy/Test/Store/TestIOPrimitives.cfh          |   14 +-
 core/Lucy/Test/Store/TestInStream.c                |   20 +-
 core/Lucy/Test/Store/TestInStream.cfh              |   14 +-
 core/Lucy/Test/Store/TestRAMDirHandle.c            |   19 +-
 core/Lucy/Test/Store/TestRAMDirHandle.cfh          |   14 +-
 core/Lucy/Test/Store/TestRAMFileHandle.c           |   19 +-
 core/Lucy/Test/Store/TestRAMFileHandle.cfh         |   14 +-
 core/Lucy/Test/Store/TestRAMFolder.c               |   19 +-
 core/Lucy/Test/Store/TestRAMFolder.cfh             |   14 +-
 core/Lucy/Test/TestSchema.c                        |   17 +-
 core/Lucy/Test/TestSchema.cfh                      |   14 +-
 core/Lucy/Test/Util/TestAtomic.c                   |   20 +-
 core/Lucy/Test/Util/TestAtomic.cfh                 |   14 +-
 core/Lucy/Test/Util/TestIndexFileNames.c           |   20 +-
 core/Lucy/Test/Util/TestIndexFileNames.cfh         |   14 +-
 core/Lucy/Test/Util/TestJson.c                     |   26 +-
 core/Lucy/Test/Util/TestJson.cfh                   |   14 +-
 core/Lucy/Test/Util/TestMemory.c                   |   19 +-
 core/Lucy/Test/Util/TestMemory.cfh                 |   14 +-
 core/Lucy/Test/Util/TestMemoryPool.c               |   22 +-
 core/Lucy/Test/Util/TestMemoryPool.cfh             |   14 +-
 core/Lucy/Test/Util/TestNumberUtils.c              |   20 +-
 core/Lucy/Test/Util/TestNumberUtils.cfh            |   14 +-
 core/Lucy/Test/Util/TestPriorityQueue.c            |   20 +-
 core/Lucy/Test/Util/TestPriorityQueue.cfh          |   14 +-
 core/Lucy/Test/Util/TestStringHelper.c             |   20 +-
 core/Lucy/Test/Util/TestStringHelper.cfh           |   14 +-
 perl/buildlib/Lucy/Build/Binding/Misc.pm           |  238 +--------------
 perl/t/610-queryparser_logic.t                     |   20 --
 perl/t/core/012-priority_queue.t                   |    4 +-
 perl/t/core/013-bit_vector.t                       |    4 +-
 perl/t/core/016-varray.t                           |    4 +-
 perl/t/core/017-hash.t                             |    4 +-
 perl/t/core/019-obj.t                              |    4 +-
 perl/t/core/020-err.t                              |    4 +-
 perl/t/core/022-bytebuf.t                          |    4 +-
 perl/t/core/024-memory_pool.t                      |    4 +-
 perl/t/core/029-charbuf.t                          |    4 +-
 perl/t/core/030-number_utils.t                     |    4 +-
 perl/t/core/031-num.t                              |    4 +-
 perl/t/core/032-string_helper.t                    |    4 +-
 perl/t/core/033-index_file_names.t                 |    4 +-
 perl/t/core/035-json.t                             |    4 +-
 perl/t/core/036-i32_array.t                        |    4 +-
 perl/t/core/037-atomic.t                           |    4 +-
 perl/t/core/038-lock_free_registry.t               |    4 +-
 perl/t/core/039-memory.t                           |    4 +-
 perl/t/core/050-ram_file_handle.t                  |    4 +-
 perl/t/core/051-fs_file_handle.t                   |    4 +-
 perl/t/core/052-instream.t                         |    4 +-
 perl/t/core/053-file_handle.t                      |    4 +-
 perl/t/core/054-io_primitives.t                    |    4 +-
 perl/t/core/055-io_chunks.t                        |    4 +-
 perl/t/core/061-ram_dir_handle.t                   |    4 +-
 perl/t/core/062-fs_dir_handle.t                    |    4 +-
 perl/t/core/103-fs_folder.t                        |    4 +-
 perl/t/core/104-ram_folder.t                       |    4 +-
 perl/t/core/105-folder.t                           |    4 +-
 perl/t/core/111-index_manager.t                    |    4 +-
 perl/t/core/112-cf_writer.t                        |    4 +-
 perl/t/core/113-cf_reader.t                        |    4 +-
 perl/t/core/150-analyzer.t                         |    4 +-
 perl/t/core/150-polyanalyzer.t                     |    4 +-
 perl/t/core/153-case_folder.t                      |    4 +-
 perl/t/core/154-regex_tokenizer.t                  |    4 +-
 perl/t/core/155-snowball_stop_filter.t             |    4 +-
 perl/t/core/156-snowball_stemmer.t                 |    4 +-
 perl/t/core/157-normalizer.t                       |    4 +-
 perl/t/core/158-standard_tokenizer.t               |    4 +-
 perl/t/core/206-snapshot.t                         |    4 +-
 perl/t/core/208-terminfo.t                         |    4 +-
 perl/t/core/214-field_misc.t                       |    4 +-
 perl/t/core/216-schema.t                           |    4 +-
 perl/t/core/220-doc_writer.t                       |    4 +-
 perl/t/core/221-highlight_writer.t                 |    4 +-
 perl/t/core/222-posting_list_writer.t              |    4 +-
 perl/t/core/223-seg_writer.t                       |    4 +-
 perl/t/core/225-polyreader.t                       |    4 +-
 perl/t/core/230-full_text_type.t                   |    4 +-
 perl/t/core/231-blob_type.t                        |    4 +-
 perl/t/core/232-numeric_type.t                     |    4 +-
 perl/t/core/234-field_type.t                       |    4 +-
 perl/t/core/301-segment.t                          |    4 +-
 perl/t/core/303-highlighter.t                      |    4 +-
 perl/t/core/309-span.t                             |    4 +-
 perl/t/core/310-heat_map.t                         |    4 +-
 perl/t/core/501-termquery.t                        |    4 +-
 perl/t/core/502-phrasequery.t                      |    4 +-
 perl/t/core/511-sort_spec.t                        |    4 +-
 perl/t/core/515-range_query.t                      |    4 +-
 perl/t/core/523-and_query.t                        |    4 +-
 perl/t/core/525-match_all_query.t                  |    4 +-
 perl/t/core/526-not_query.t                        |    4 +-
 perl/t/core/527-req_opt_query.t                    |    4 +-
 perl/t/core/528-leaf_query.t                       |    4 +-
 perl/t/core/529-no_match_query.t                   |    4 +-
 perl/t/core/530-series_matcher.t                   |    4 +-
 perl/t/core/531-or_query.t                         |    4 +-
 perl/t/core/610-queryparser_logic.t                |   23 ++
 210 files changed, 2035 insertions(+), 918 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test.c b/core/Lucy/Test.c
index aec89d5..b4baf9a 100644
--- a/core/Lucy/Test.c
+++ b/core/Lucy/Test.c
@@ -25,7 +25,75 @@
 #include "Lucy/Test.h"
 #include "Clownfish/Test/TestFormatter.h"
 #include "Clownfish/Test/TestRunner.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/TestTermInfo.h"
+#include "Lucy/Test/Object/TestBitVector.h"
+#include "Lucy/Test/Object/TestByteBuf.h"
+#include "Lucy/Test/Object/TestCharBuf.h"
+#include "Lucy/Test/Object/TestErr.h"
+#include "Lucy/Test/Object/TestHash.h"
+#include "Lucy/Test/Object/TestI32Array.h"
+#include "Lucy/Test/Object/TestLockFreeRegistry.h"
+#include "Lucy/Test/Object/TestNum.h"
+#include "Lucy/Test/Object/TestObj.h"
+#include "Lucy/Test/Object/TestVArray.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/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/Util/TestAtomic.h"
+#include "Lucy/Test/Util/TestIndexFileNames.h"
+#include "Lucy/Test/Util/TestJson.h"
+#include "Lucy/Test/Util/TestMemory.h"
+#include "Lucy/Test/Util/TestMemoryPool.h"
+#include "Lucy/Test/Util/TestNumberUtils.h"
+#include "Lucy/Test/Util/TestPriorityQueue.h"
+#include "Lucy/Test/Util/TestStringHelper.h"
 
 static bool
 S_vtest_true(TestBatch *self, bool condition, const char *pattern,
@@ -35,7 +103,76 @@ static VArray*
 S_all_test_batches() {
     VArray *batches = VA_new(0);
 
+    VA_Push(batches, (Obj*)TestPriQ_new());
+    VA_Push(batches, (Obj*)TestBitVector_new());
+    VA_Push(batches, (Obj*)TestVArray_new());
+    VA_Push(batches, (Obj*)TestHash_new());
+    VA_Push(batches, (Obj*)TestObj_new());
+    VA_Push(batches, (Obj*)TestErr_new());
+    VA_Push(batches, (Obj*)TestBB_new());
+    VA_Push(batches, (Obj*)TestMemPool_new());
+    VA_Push(batches, (Obj*)TestCB_new());
+    VA_Push(batches, (Obj*)TestNumUtil_new());
+    VA_Push(batches, (Obj*)TestNum_new());
+    VA_Push(batches, (Obj*)TestStrHelp_new());
+    VA_Push(batches, (Obj*)TestIxFileNames_new());
+    VA_Push(batches, (Obj*)TestJson_new());
+    VA_Push(batches, (Obj*)TestI32Arr_new());
+    VA_Push(batches, (Obj*)TestAtomic_new());
+    VA_Push(batches, (Obj*)TestLFReg_new());
+    VA_Push(batches, (Obj*)TestMemory_new());
+    VA_Push(batches, (Obj*)TestRAMFH_new());
+    VA_Push(batches, (Obj*)TestFSFH_new());
+    VA_Push(batches, (Obj*)TestInStream_new());
+    VA_Push(batches, (Obj*)TestFH_new());
+    VA_Push(batches, (Obj*)TestIOPrimitives_new());
+    VA_Push(batches, (Obj*)TestIOChunks_new());
+    VA_Push(batches, (Obj*)TestRAMDH_new());
+    VA_Push(batches, (Obj*)TestFSDH_new());
+    VA_Push(batches, (Obj*)TestFSFolder_new());
+    VA_Push(batches, (Obj*)TestRAMFolder_new());
+    VA_Push(batches, (Obj*)TestFolder_new());
+    VA_Push(batches, (Obj*)TestIxManager_new());
+    VA_Push(batches, (Obj*)TestCFWriter_new());
+    VA_Push(batches, (Obj*)TestCFReader_new());
+    VA_Push(batches, (Obj*)TestAnalyzer_new());
+    VA_Push(batches, (Obj*)TestPolyAnalyzer_new());
+    VA_Push(batches, (Obj*)TestCaseFolder_new());
+    VA_Push(batches, (Obj*)TestRegexTokenizer_new());
+    VA_Push(batches, (Obj*)TestSnowStop_new());
+    VA_Push(batches, (Obj*)TestSnowStemmer_new());
+    VA_Push(batches, (Obj*)TestNormalizer_new());
+    VA_Push(batches, (Obj*)TestStandardTokenizer_new());
+    VA_Push(batches, (Obj*)TestSnapshot_new());
+    VA_Push(batches, (Obj*)TestTermInfo_new());
+    VA_Push(batches, (Obj*)TestFieldMisc_new());
+    VA_Push(batches, (Obj*)TestBatchSchema_new());
+    VA_Push(batches, (Obj*)TestDocWriter_new());
+    VA_Push(batches, (Obj*)TestHLWriter_new());
+    VA_Push(batches, (Obj*)TestPListWriter_new());
+    VA_Push(batches, (Obj*)TestSegWriter_new());
+    VA_Push(batches, (Obj*)TestPolyReader_new());
+    VA_Push(batches, (Obj*)TestFullTextType_new());
+    VA_Push(batches, (Obj*)TestBlobType_new());
+    VA_Push(batches, (Obj*)TestNumericType_new());
+    VA_Push(batches, (Obj*)TestFType_new());
+    VA_Push(batches, (Obj*)TestSeg_new());
+    VA_Push(batches, (Obj*)TestHighlighter_new());
+    VA_Push(batches, (Obj*)TestSpan_new());
     VA_Push(batches, (Obj*)TestHeatMap_new());
+    VA_Push(batches, (Obj*)TestTermQuery_new());
+    VA_Push(batches, (Obj*)TestPhraseQuery_new());
+    VA_Push(batches, (Obj*)TestSortSpec_new());
+    VA_Push(batches, (Obj*)TestRangeQuery_new());
+    VA_Push(batches, (Obj*)TestANDQuery_new());
+    VA_Push(batches, (Obj*)TestMatchAllQuery_new());
+    VA_Push(batches, (Obj*)TestNOTQuery_new());
+    VA_Push(batches, (Obj*)TestReqOptQuery_new());
+    VA_Push(batches, (Obj*)TestLeafQuery_new());
+    VA_Push(batches, (Obj*)TestNoMatchQuery_new());
+    VA_Push(batches, (Obj*)TestSeriesMatcher_new());
+    VA_Push(batches, (Obj*)TestORQuery_new());
+    VA_Push(batches, (Obj*)TestQPLogic_new());
 
     return batches;
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestAnalyzer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestAnalyzer.c b/core/Lucy/Test/Analysis/TestAnalyzer.c
index 3edf4fe..8e2c95d 100644
--- a/core/Lucy/Test/Analysis/TestAnalyzer.c
+++ b/core/Lucy/Test/Analysis/TestAnalyzer.c
@@ -22,6 +22,17 @@
 #include "Lucy/Analysis/Analyzer.h"
 #include "Lucy/Analysis/Inversion.h"
 
+TestAnalyzer*
+TestAnalyzer_new() {
+    TestAnalyzer *self = (TestAnalyzer*)VTable_Make_Obj(TESTANALYZER);
+    return TestAnalyzer_init(self);
+}
+
+TestAnalyzer*
+TestAnalyzer_init(TestAnalyzer *self) {
+    return (TestAnalyzer*)TestBatch_init((TestBatch*)self, 3);
+}
+
 DummyAnalyzer*
 DummyAnalyzer_new() {
     DummyAnalyzer *self = (DummyAnalyzer*)VTable_Make_Obj(DUMMYANALYZER);
@@ -53,14 +64,9 @@ test_analysis(TestBatch *batch) {
 }
 
 void
-TestAnalyzer_run_tests() {
-    TestBatch *batch = TestBatch_new(3);
-
-    TestBatch_Plan(batch);
-
+TestAnalyzer_run_tests(TestAnalyzer *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_analysis(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestAnalyzer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestAnalyzer.cfh b/core/Lucy/Test/Analysis/TestAnalyzer.cfh
index 53ddd62..7d070cb 100644
--- a/core/Lucy/Test/Analysis/TestAnalyzer.cfh
+++ b/core/Lucy/Test/Analysis/TestAnalyzer.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestAnalyzer {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestAnalyzer
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestAnalyzer*
+    new();
+
+    inert TestAnalyzer*
+    init(TestAnalyzer *self);
+
+    void
+    Run_Tests(TestAnalyzer *self);
 }
 
 class Lucy::Test::Analysis::DummyAnalyzer inherits Lucy::Analysis::Analyzer {

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestCaseFolder.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestCaseFolder.c b/core/Lucy/Test/Analysis/TestCaseFolder.c
index c455abc..71dbcc9 100644
--- a/core/Lucy/Test/Analysis/TestCaseFolder.c
+++ b/core/Lucy/Test/Analysis/TestCaseFolder.c
@@ -22,6 +22,17 @@
 #include "Lucy/Test/Analysis/TestCaseFolder.h"
 #include "Lucy/Analysis/CaseFolder.h"
 
+TestCaseFolder*
+TestCaseFolder_new() {
+    TestCaseFolder *self = (TestCaseFolder*)VTable_Make_Obj(TESTCASEFOLDER);
+    return TestCaseFolder_init(self);
+}
+
+TestCaseFolder*
+TestCaseFolder_init(TestCaseFolder *self) {
+    return (TestCaseFolder*)TestBatch_init((TestBatch*)self, 6);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     CaseFolder *case_folder = CaseFolder_new();
@@ -55,15 +66,10 @@ test_analysis(TestBatch *batch) {
 }
 
 void
-TestCaseFolder_run_tests() {
-    TestBatch *batch = TestBatch_new(6);
-
-    TestBatch_Plan(batch);
-
+TestCaseFolder_run_tests(TestCaseFolder *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_analysis(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestCaseFolder.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestCaseFolder.cfh b/core/Lucy/Test/Analysis/TestCaseFolder.cfh
index b82e109..8413000 100644
--- a/core/Lucy/Test/Analysis/TestCaseFolder.cfh
+++ b/core/Lucy/Test/Analysis/TestCaseFolder.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestCaseFolder {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestCaseFolder
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestCaseFolder*
+    new();
+
+    inert TestCaseFolder*
+    init(TestCaseFolder *self);
+
+    void
+    Run_Tests(TestCaseFolder *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestNormalizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestNormalizer.c b/core/Lucy/Test/Analysis/TestNormalizer.c
index 2bc7d63..4d13382 100644
--- a/core/Lucy/Test/Analysis/TestNormalizer.c
+++ b/core/Lucy/Test/Analysis/TestNormalizer.c
@@ -24,6 +24,17 @@
 #include "Lucy/Store/FSFolder.h"
 #include "Lucy/Util/Json.h"
 
+TestNormalizer*
+TestNormalizer_new() {
+    TestNormalizer *self = (TestNormalizer*)VTable_Make_Obj(TESTNORMALIZER);
+    return TestNormalizer_init(self);
+}
+
+TestNormalizer*
+TestNormalizer_init(TestNormalizer *self) {
+    return (TestNormalizer*)TestBatch_init((TestBatch*)self, 20);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     Normalizer *normalizer[4];
@@ -109,15 +120,10 @@ test_normalization(TestBatch *batch) {
 }
 
 void
-TestNormalizer_run_tests() {
-    TestBatch *batch = TestBatch_new(20);
-
-    TestBatch_Plan(batch);
-
+TestNormalizer_run_tests(TestNormalizer *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_normalization(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestNormalizer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestNormalizer.cfh b/core/Lucy/Test/Analysis/TestNormalizer.cfh
index 5658a37..3b0ebc2 100644
--- a/core/Lucy/Test/Analysis/TestNormalizer.cfh
+++ b/core/Lucy/Test/Analysis/TestNormalizer.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestNormalizer {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestNormalizer
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestNormalizer*
+    new();
+
+    inert TestNormalizer*
+    init(TestNormalizer *self);
+
+    void
+    Run_Tests(TestNormalizer *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c b/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
index ef12432..8a15808 100644
--- a/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
+++ b/core/Lucy/Test/Analysis/TestPolyAnalyzer.c
@@ -26,6 +26,17 @@
 #include "Lucy/Analysis/SnowballStemmer.h"
 #include "Lucy/Analysis/StandardTokenizer.h"
 
+TestPolyAnalyzer*
+TestPolyAnalyzer_new() {
+    TestPolyAnalyzer *self = (TestPolyAnalyzer*)VTable_Make_Obj(TESTPOLYANALYZER);
+    return TestPolyAnalyzer_init(self);
+}
+
+TestPolyAnalyzer*
+TestPolyAnalyzer_init(TestPolyAnalyzer *self) {
+    return (TestPolyAnalyzer*)TestBatch_init((TestBatch*)self, 19);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     CharBuf      *EN          = (CharBuf*)ZCB_WRAP_STR("en", 2);
@@ -157,15 +168,10 @@ test_Get_Analyzers(TestBatch *batch) {
 }
 
 void
-TestPolyAnalyzer_run_tests() {
-    TestBatch *batch = TestBatch_new(19);
-
-    TestBatch_Plan(batch);
-
+TestPolyAnalyzer_run_tests(TestPolyAnalyzer *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_analysis(batch);
     test_Get_Analyzers(batch);
-
-    DECREF(batch);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh b/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
index c2983c7..d7fa80e 100644
--- a/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
+++ b/core/Lucy/Test/Analysis/TestPolyAnalyzer.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestPolyAnalyzer {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestPolyAnalyzer
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestPolyAnalyzer*
+    new();
+
+    inert TestPolyAnalyzer*
+    init(TestPolyAnalyzer *self);
+
+    void
+    Run_Tests(TestPolyAnalyzer *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestRegexTokenizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestRegexTokenizer.c b/core/Lucy/Test/Analysis/TestRegexTokenizer.c
index ec6e507..ab19eff 100644
--- a/core/Lucy/Test/Analysis/TestRegexTokenizer.c
+++ b/core/Lucy/Test/Analysis/TestRegexTokenizer.c
@@ -22,6 +22,17 @@
 #include "Lucy/Analysis/RegexTokenizer.h"
 
 
+TestRegexTokenizer*
+TestRegexTokenizer_new() {
+    TestRegexTokenizer *self = (TestRegexTokenizer*)VTable_Make_Obj(TESTREGEXTOKENIZER);
+    return TestRegexTokenizer_init(self);
+}
+
+TestRegexTokenizer*
+TestRegexTokenizer_init(TestRegexTokenizer *self) {
+    return (TestRegexTokenizer*)TestBatch_init((TestBatch*)self, 3);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     ZombieCharBuf *word_char_pattern  = ZCB_WRAP_STR("\\w+", 3);
@@ -56,14 +67,9 @@ test_Dump_Load_and_Equals(TestBatch *batch) {
 }
 
 void
-TestRegexTokenizer_run_tests() {
-    TestBatch *batch = TestBatch_new(3);
-
-    TestBatch_Plan(batch);
-
+TestRegexTokenizer_run_tests(TestRegexTokenizer *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh b/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
index 3975e00..000a3ec 100644
--- a/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
+++ b/core/Lucy/Test/Analysis/TestRegexTokenizer.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestRegexTokenizer {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestRegexTokenizer
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestRegexTokenizer*
+    new();
+
+    inert TestRegexTokenizer*
+    init(TestRegexTokenizer *self);
+
+    void
+    Run_Tests(TestRegexTokenizer *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestSnowballStemmer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStemmer.c b/core/Lucy/Test/Analysis/TestSnowballStemmer.c
index aa05b84..e6d62e0 100644
--- a/core/Lucy/Test/Analysis/TestSnowballStemmer.c
+++ b/core/Lucy/Test/Analysis/TestSnowballStemmer.c
@@ -23,6 +23,17 @@
 #include "Lucy/Store/FSFolder.h"
 #include "Lucy/Util/Json.h"
 
+TestSnowballStemmer*
+TestSnowStemmer_new() {
+    TestSnowballStemmer *self = (TestSnowballStemmer*)VTable_Make_Obj(TESTSNOWBALLSTEMMER);
+    return TestSnowStemmer_init(self);
+}
+
+TestSnowballStemmer*
+TestSnowStemmer_init(TestSnowballStemmer *self) {
+    return (TestSnowballStemmer*)TestBatch_init((TestBatch*)self, 153);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     CharBuf *EN = (CharBuf*)ZCB_WRAP_STR("en", 2);
@@ -96,15 +107,10 @@ test_stemming(TestBatch *batch) {
 }
 
 void
-TestSnowStemmer_run_tests() {
-    TestBatch *batch = TestBatch_new(153);
-
-    TestBatch_Plan(batch);
-
+TestSnowStemmer_run_tests(TestSnowballStemmer *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_stemming(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh b/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
index 8dbc5db..d4805dd 100644
--- a/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
+++ b/core/Lucy/Test/Analysis/TestSnowballStemmer.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestSnowballStemmer cnick TestSnowStemmer {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestSnowballStemmer cnick TestSnowStemmer
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestSnowballStemmer*
+    new();
+
+    inert TestSnowballStemmer*
+    init(TestSnowballStemmer *self);
+
+    void
+    Run_Tests(TestSnowballStemmer *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStopFilter.c b/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
index e1bde93..c85a0e7 100644
--- a/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
+++ b/core/Lucy/Test/Analysis/TestSnowballStopFilter.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/Analysis/TestSnowballStopFilter.h"
 #include "Lucy/Analysis/SnowballStopFilter.h"
 
+TestSnowballStopFilter*
+TestSnowStop_new() {
+    TestSnowballStopFilter *self = (TestSnowballStopFilter*)VTable_Make_Obj(TESTSNOWBALLSTOPFILTER);
+    return TestSnowStop_init(self);
+}
+
+TestSnowballStopFilter*
+TestSnowStop_init(TestSnowballStopFilter *self) {
+    return (TestSnowballStopFilter*)TestBatch_init((TestBatch*)self, 3);
+}
+
 static SnowballStopFilter*
 S_make_stopfilter(void *unused, ...) {
     va_list args;
@@ -70,14 +81,9 @@ test_Dump_Load_and_Equals(TestBatch *batch) {
 }
 
 void
-TestSnowStop_run_tests() {
-    TestBatch *batch = TestBatch_new(3);
-
-    TestBatch_Plan(batch);
-
+TestSnowStop_run_tests(TestSnowballStopFilter *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh b/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
index 5d6fd4e..d29c032 100644
--- a/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
+++ b/core/Lucy/Test/Analysis/TestSnowballStopFilter.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestSnowballStopFilter cnick TestSnowStop {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestSnowballStopFilter cnick TestSnowStop
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestSnowballStopFilter*
+    new();
+
+    inert TestSnowballStopFilter*
+    init(TestSnowballStopFilter *self);
+
+    void
+    Run_Tests(TestSnowballStopFilter *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestStandardTokenizer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestStandardTokenizer.c b/core/Lucy/Test/Analysis/TestStandardTokenizer.c
index 9df4aea..c9de950 100644
--- a/core/Lucy/Test/Analysis/TestStandardTokenizer.c
+++ b/core/Lucy/Test/Analysis/TestStandardTokenizer.c
@@ -23,6 +23,17 @@
 #include "Lucy/Store/FSFolder.h"
 #include "Lucy/Util/Json.h"
 
+TestStandardTokenizer*
+TestStandardTokenizer_new() {
+    TestStandardTokenizer *self = (TestStandardTokenizer*)VTable_Make_Obj(TESTSTANDARDTOKENIZER);
+    return TestStandardTokenizer_init(self);
+}
+
+TestStandardTokenizer*
+TestStandardTokenizer_init(TestStandardTokenizer *self) {
+    return (TestStandardTokenizer*)TestBatch_init((TestBatch*)self, 984);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     StandardTokenizer *tokenizer = StandardTokenizer_new();
@@ -116,15 +127,10 @@ test_tokenizer(TestBatch *batch) {
 }
 
 void
-TestStandardTokenizer_run_tests() {
-    TestBatch *batch = TestBatch_new(984);
-
-    TestBatch_Plan(batch);
-
+TestStandardTokenizer_run_tests(TestStandardTokenizer *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_tokenizer(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh b/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
index 95d8587..6468a53 100644
--- a/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
+++ b/core/Lucy/Test/Analysis/TestStandardTokenizer.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Analysis::TestStandardTokenizer {
-    inert void
-    run_tests();
+class Lucy::Test::Analysis::TestStandardTokenizer
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestStandardTokenizer*
+    new();
+
+    inert TestStandardTokenizer*
+    init(TestStandardTokenizer *self);
+
+    void
+    Run_Tests(TestStandardTokenizer *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Highlight/TestHeatMap.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Highlight/TestHeatMap.c b/core/Lucy/Test/Highlight/TestHeatMap.c
index 0f9d96c..7764dd9 100644
--- a/core/Lucy/Test/Highlight/TestHeatMap.c
+++ b/core/Lucy/Test/Highlight/TestHeatMap.c
@@ -33,7 +33,6 @@ TestHeatMap_init(TestHeatMap *self) {
     return (TestHeatMap*)TestBatch_init((TestBatch*)self, 13);
 }
 
-
 static void
 test_calc_proximity_boost(TestBatch *batch) {
     VArray  *spans    = VA_new(0);

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Highlight/TestHighlighter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Highlight/TestHighlighter.c b/core/Lucy/Test/Highlight/TestHighlighter.c
index f47826a..f062218 100644
--- a/core/Lucy/Test/Highlight/TestHighlighter.c
+++ b/core/Lucy/Test/Highlight/TestHighlighter.c
@@ -50,6 +50,17 @@
     "6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 "
 #define TEST_STRING_LEN 425
 
+TestHighlighter*
+TestHighlighter_new() {
+    TestHighlighter *self = (TestHighlighter*)VTable_Make_Obj(TESTHIGHLIGHTER);
+    return TestHighlighter_init(self);
+}
+
+TestHighlighter*
+TestHighlighter_init(TestHighlighter *self) {
+    return (TestHighlighter*)TestBatch_init((TestBatch*)self, 35);
+}
+
 static void
 test_Find_Best_Fragment(TestBatch *batch, Searcher *searcher, Obj *query) {
     CharBuf *content = (CharBuf*)ZCB_WRAP_STR("content", 7);
@@ -571,15 +582,10 @@ test_hl_selection(TestBatch *batch) {
 }
 
 void
-TestHighlighter_run_tests() {
-    TestBatch *batch = TestBatch_new(35);
-
-    TestBatch_Plan(batch);
-
+TestHighlighter_run_tests(TestHighlighter *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_highlighting(batch);
     test_hl_selection(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Highlight/TestHighlighter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Highlight/TestHighlighter.cfh b/core/Lucy/Test/Highlight/TestHighlighter.cfh
index 735c079..308b0da 100644
--- a/core/Lucy/Test/Highlight/TestHighlighter.cfh
+++ b/core/Lucy/Test/Highlight/TestHighlighter.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Highlight::TestHighlighter {
-    inert void
-    run_tests();
+class Lucy::Test::Highlight::TestHighlighter
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestHighlighter*
+    new();
+
+    inert TestHighlighter*
+    init(TestHighlighter *self);
+
+    void
+    Run_Tests(TestHighlighter *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestDocWriter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestDocWriter.c b/core/Lucy/Test/Index/TestDocWriter.c
index 76d6fe3..bb72b6e 100644
--- a/core/Lucy/Test/Index/TestDocWriter.c
+++ b/core/Lucy/Test/Index/TestDocWriter.c
@@ -21,12 +21,21 @@
 #include "Lucy/Test/Index/TestDocWriter.h"
 #include "Lucy/Index/DocWriter.h"
 
+TestDocWriter*
+TestDocWriter_new() {
+    TestDocWriter *self = (TestDocWriter*)VTable_Make_Obj(TESTDOCWRITER);
+    return TestDocWriter_init(self);
+}
+
+TestDocWriter*
+TestDocWriter_init(TestDocWriter *self) {
+    return (TestDocWriter*)TestBatch_init((TestBatch*)self, 1);
+}
+
 void
-TestDocWriter_run_tests() {
-    TestBatch *batch = TestBatch_new(1);
-    TestBatch_Plan(batch);
+TestDocWriter_run_tests(TestDocWriter *self) {
+    TestBatch *batch = (TestBatch*)self;
     PASS(batch, "placeholder");
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestDocWriter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestDocWriter.cfh b/core/Lucy/Test/Index/TestDocWriter.cfh
index 5cb2b76..d929a26 100644
--- a/core/Lucy/Test/Index/TestDocWriter.cfh
+++ b/core/Lucy/Test/Index/TestDocWriter.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestDocWriter {
-    inert void
-    run_tests();
+class Lucy::Test::Index::TestDocWriter
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestDocWriter*
+    new();
+
+    inert TestDocWriter*
+    init(TestDocWriter *self);
+
+    void
+    Run_Tests(TestDocWriter *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestHighlightWriter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestHighlightWriter.c b/core/Lucy/Test/Index/TestHighlightWriter.c
index 464da67..afe9010 100644
--- a/core/Lucy/Test/Index/TestHighlightWriter.c
+++ b/core/Lucy/Test/Index/TestHighlightWriter.c
@@ -21,12 +21,21 @@
 #include "Lucy/Test/Index/TestHighlightWriter.h"
 #include "Lucy/Index/HighlightWriter.h"
 
+TestHighlightWriter*
+TestHLWriter_new() {
+    TestHighlightWriter *self = (TestHighlightWriter*)VTable_Make_Obj(TESTHIGHLIGHTWRITER);
+    return TestHLWriter_init(self);
+}
+
+TestHighlightWriter*
+TestHLWriter_init(TestHighlightWriter *self) {
+    return (TestHighlightWriter*)TestBatch_init((TestBatch*)self, 1);
+}
+
 void
-TestHLWriter_run_tests() {
-    TestBatch *batch = TestBatch_new(1);
-    TestBatch_Plan(batch);
+TestHLWriter_run_tests(TestHighlightWriter *self) {
+    TestBatch *batch = (TestBatch*)self;
     PASS(batch, "Placeholder");
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestHighlightWriter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestHighlightWriter.cfh b/core/Lucy/Test/Index/TestHighlightWriter.cfh
index 08e2abe..08987ea 100644
--- a/core/Lucy/Test/Index/TestHighlightWriter.cfh
+++ b/core/Lucy/Test/Index/TestHighlightWriter.cfh
@@ -16,11 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestHighlightWriter
-    cnick TestHLWriter {
+class Lucy::Test::Index::TestHighlightWriter cnick TestHLWriter
+    inherits Lucy::Test::TestBatch {
 
-    inert void
-    run_tests();
+    inert incremented TestHighlightWriter*
+    new();
+
+    inert TestHighlightWriter*
+    init(TestHighlightWriter *self);
+
+    void
+    Run_Tests(TestHighlightWriter *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestIndexManager.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestIndexManager.c b/core/Lucy/Test/Index/TestIndexManager.c
index ba75e3d..d72a576 100644
--- a/core/Lucy/Test/Index/TestIndexManager.c
+++ b/core/Lucy/Test/Index/TestIndexManager.c
@@ -20,6 +20,17 @@
 #include "Lucy/Test/Index/TestIndexManager.h"
 #include "Lucy/Index/IndexManager.h"
 
+TestIndexManager*
+TestIxManager_new() {
+    TestIndexManager *self = (TestIndexManager*)VTable_Make_Obj(TESTINDEXMANAGER);
+    return TestIxManager_init(self);
+}
+
+TestIndexManager*
+TestIxManager_init(TestIndexManager *self) {
+    return (TestIndexManager*)TestBatch_init((TestBatch*)self, 34);
+}
+
 static void
 test_Choose_Sparse(TestBatch *batch) {
     IndexManager *manager = IxManager_new(NULL, NULL);
@@ -49,10 +60,8 @@ test_Choose_Sparse(TestBatch *batch) {
 }
 
 void
-TestIxManager_run_tests() {
-    TestBatch *batch = TestBatch_new(34);
-    TestBatch_Plan(batch);
+TestIxManager_run_tests(TestIndexManager *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Choose_Sparse(batch);
-    DECREF(batch);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestIndexManager.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestIndexManager.cfh b/core/Lucy/Test/Index/TestIndexManager.cfh
index dc22069..521bcf0 100644
--- a/core/Lucy/Test/Index/TestIndexManager.cfh
+++ b/core/Lucy/Test/Index/TestIndexManager.cfh
@@ -16,10 +16,16 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestIndexManager
-    cnick TestIxManager {
+class Lucy::Test::Index::TestIndexManager cnick TestIxManager
+    inherits Lucy::Test::TestBatch {
 
-    inert void
-    run_tests();
+    inert incremented TestIndexManager*
+    new();
+
+    inert TestIndexManager*
+    init(TestIndexManager *self);
+
+    void
+    Run_Tests(TestIndexManager *self);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestPolyReader.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestPolyReader.c b/core/Lucy/Test/Index/TestPolyReader.c
index 51e35fd..9689756 100644
--- a/core/Lucy/Test/Index/TestPolyReader.c
+++ b/core/Lucy/Test/Index/TestPolyReader.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/Index/TestPolyReader.h"
 #include "Lucy/Index/PolyReader.h"
 
+TestPolyReader*
+TestPolyReader_new() {
+    TestPolyReader *self = (TestPolyReader*)VTable_Make_Obj(TESTPOLYREADER);
+    return TestPolyReader_init(self);
+}
+
+TestPolyReader*
+TestPolyReader_init(TestPolyReader *self) {
+    return (TestPolyReader*)TestBatch_init((TestBatch*)self, 1);
+}
+
 static void
 test_sub_tick(TestBatch *batch) {
     size_t num_segs = 255;
@@ -39,12 +50,8 @@ test_sub_tick(TestBatch *batch) {
 }
 
 void
-TestPolyReader_run_tests() {
-    TestBatch *batch = TestBatch_new(1);
-    TestBatch_Plan(batch);
-
+TestPolyReader_run_tests(TestPolyReader *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_sub_tick(batch);
-
-    DECREF(batch);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestPolyReader.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestPolyReader.cfh b/core/Lucy/Test/Index/TestPolyReader.cfh
index 4bf4ec8..1d13608 100644
--- a/core/Lucy/Test/Index/TestPolyReader.cfh
+++ b/core/Lucy/Test/Index/TestPolyReader.cfh
@@ -16,8 +16,16 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestPolyReader {
-    inert void
-    run_tests();
+class Lucy::Test::Index::TestPolyReader
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestPolyReader*
+    new();
+
+    inert TestPolyReader*
+    init(TestPolyReader *self);
+
+    void
+    Run_Tests(TestPolyReader *self);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestPostingListWriter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestPostingListWriter.c b/core/Lucy/Test/Index/TestPostingListWriter.c
index 90aee46..21a79ae 100644
--- a/core/Lucy/Test/Index/TestPostingListWriter.c
+++ b/core/Lucy/Test/Index/TestPostingListWriter.c
@@ -20,12 +20,21 @@
 #include "Lucy/Test.h"
 #include "Lucy/Test/Index/TestPostingListWriter.h"
 
+TestPostingListWriter*
+TestPListWriter_new() {
+    TestPostingListWriter *self = (TestPostingListWriter*)VTable_Make_Obj(TESTPOSTINGLISTWRITER);
+    return TestPListWriter_init(self);
+}
+
+TestPostingListWriter*
+TestPListWriter_init(TestPostingListWriter *self) {
+    return (TestPostingListWriter*)TestBatch_init((TestBatch*)self, 1);
+}
+
 void
-TestPListWriter_run_tests() {
-    TestBatch *batch = TestBatch_new(1);
-    TestBatch_Plan(batch);
+TestPListWriter_run_tests(TestPostingListWriter *self) {
+    TestBatch *batch = (TestBatch*)self;
     PASS(batch, "Placeholder");
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestPostingListWriter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestPostingListWriter.cfh b/core/Lucy/Test/Index/TestPostingListWriter.cfh
index af5401c..e4d8c27 100644
--- a/core/Lucy/Test/Index/TestPostingListWriter.cfh
+++ b/core/Lucy/Test/Index/TestPostingListWriter.cfh
@@ -16,11 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestPostingListWriter
-    cnick TestPListWriter {
+class Lucy::Test::Index::TestPostingListWriter cnick TestPListWriter
+    inherits Lucy::Test::TestBatch {
 
-    inert void
-    run_tests();
+    inert incremented TestPostingListWriter*
+    new();
+
+    inert TestPostingListWriter*
+    init(TestPostingListWriter *self);
+
+    void
+    Run_Tests(TestPostingListWriter *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestSegWriter.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSegWriter.c b/core/Lucy/Test/Index/TestSegWriter.c
index 31ac12c..bff3e82 100644
--- a/core/Lucy/Test/Index/TestSegWriter.c
+++ b/core/Lucy/Test/Index/TestSegWriter.c
@@ -21,12 +21,21 @@
 #include "Lucy/Test/Index/TestSegWriter.h"
 #include "Lucy/Index/SegWriter.h"
 
+TestSegWriter*
+TestSegWriter_new() {
+    TestSegWriter *self = (TestSegWriter*)VTable_Make_Obj(TESTSEGWRITER);
+    return TestSegWriter_init(self);
+}
+
+TestSegWriter*
+TestSegWriter_init(TestSegWriter *self) {
+    return (TestSegWriter*)TestBatch_init((TestBatch*)self, 1);
+}
+
 void
-TestSegWriter_run_tests() {
-    TestBatch *batch = TestBatch_new(1);
-    TestBatch_Plan(batch);
+TestSegWriter_run_tests(TestSegWriter *self) {
+    TestBatch *batch = (TestBatch*)self;
     PASS(batch, "placeholder");
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestSegWriter.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSegWriter.cfh b/core/Lucy/Test/Index/TestSegWriter.cfh
index 121b182..b88cffa 100644
--- a/core/Lucy/Test/Index/TestSegWriter.cfh
+++ b/core/Lucy/Test/Index/TestSegWriter.cfh
@@ -16,10 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestSegWriter  {
+class Lucy::Test::Index::TestSegWriter
+    inherits Lucy::Test::TestBatch {
 
-    inert void
-    run_tests();
+    inert incremented TestSegWriter*
+    new();
+
+    inert TestSegWriter*
+    init(TestSegWriter *self);
+
+    void
+    Run_Tests(TestSegWriter *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestSegment.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSegment.c b/core/Lucy/Test/Index/TestSegment.c
index 80e2503..a98eca0 100644
--- a/core/Lucy/Test/Index/TestSegment.c
+++ b/core/Lucy/Test/Index/TestSegment.c
@@ -22,6 +22,17 @@
 #include "Lucy/Index/Segment.h"
 #include "Lucy/Store/RAMFolder.h"
 
+TestSegment*
+TestSeg_new() {
+    TestSegment *self = (TestSegment*)VTable_Make_Obj(TESTSEGMENT);
+    return TestSeg_init(self);
+}
+
+TestSegment*
+TestSeg_init(TestSegment *self) {
+    return (TestSegment*)TestBatch_init((TestBatch*)self, 21);
+}
+
 static void
 test_fields(TestBatch *batch) {
     Segment *segment = Seg_new(1);
@@ -149,18 +160,14 @@ test_Write_File_and_Read_File(TestBatch *batch) {
 }
 
 void
-TestSeg_run_tests() {
-    TestBatch *batch = TestBatch_new(21);
-
-    TestBatch_Plan(batch);
+TestSeg_run_tests(TestSegment *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_fields(batch);
     test_metadata_storage(batch);
     test_seg_name_and_num(batch);
     test_count(batch);
     test_Compare_To(batch);
     test_Write_File_and_Read_File(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestSegment.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSegment.cfh b/core/Lucy/Test/Index/TestSegment.cfh
index 8befd8c..e8646ea 100644
--- a/core/Lucy/Test/Index/TestSegment.cfh
+++ b/core/Lucy/Test/Index/TestSegment.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestSegment cnick TestSeg {
-    inert void
-    run_tests();
+class Lucy::Test::Index::TestSegment cnick TestSeg
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestSegment*
+    new();
+
+    inert TestSegment*
+    init(TestSegment *self);
+
+    void
+    Run_Tests(TestSegment *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestSnapshot.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSnapshot.c b/core/Lucy/Test/Index/TestSnapshot.c
index 9cd5eb4..e4ec3da 100644
--- a/core/Lucy/Test/Index/TestSnapshot.c
+++ b/core/Lucy/Test/Index/TestSnapshot.c
@@ -21,6 +21,17 @@
 #include "Lucy/Index/Snapshot.h"
 #include "Lucy/Store/RAMFolder.h"
 
+TestSnapshot*
+TestSnapshot_new() {
+    TestSnapshot *self = (TestSnapshot*)VTable_Make_Obj(TESTSNAPSHOT);
+    return TestSnapshot_init(self);
+}
+
+TestSnapshot*
+TestSnapshot_init(TestSnapshot *self) {
+    return (TestSnapshot*)TestBatch_init((TestBatch*)self, 9);
+}
+
 static void
 test_Add_and_Delete(TestBatch *batch) {
     Snapshot *snapshot = Snapshot_new();
@@ -95,13 +106,11 @@ test_Read_File_and_Write_File(TestBatch *batch) {
 }
 
 void
-TestSnapshot_run_tests() {
-    TestBatch *batch = TestBatch_new(9);
-    TestBatch_Plan(batch);
+TestSnapshot_run_tests(TestSnapshot *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Add_and_Delete(batch);
     test_path_handling(batch);
     test_Read_File_and_Write_File(batch);
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestSnapshot.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestSnapshot.cfh b/core/Lucy/Test/Index/TestSnapshot.cfh
index b577a24..62669ae 100644
--- a/core/Lucy/Test/Index/TestSnapshot.cfh
+++ b/core/Lucy/Test/Index/TestSnapshot.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestSnapshot {
-    inert void
-    run_tests();
+class Lucy::Test::Index::TestSnapshot
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestSnapshot*
+    new();
+
+    inert TestSnapshot*
+    init(TestSnapshot *self);
+
+    void
+    Run_Tests(TestSnapshot *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestTermInfo.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestTermInfo.c b/core/Lucy/Test/Index/TestTermInfo.c
index 71088f9..902d5f4 100644
--- a/core/Lucy/Test/Index/TestTermInfo.c
+++ b/core/Lucy/Test/Index/TestTermInfo.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/Index/TestTermInfo.h"
 #include "Lucy/Index/TermInfo.h"
 
+TestTermInfo*
+TestTermInfo_new() {
+    TestTermInfo *self = (TestTermInfo*)VTable_Make_Obj(TESTTERMINFO);
+    return TestTermInfo_init(self);
+}
+
+TestTermInfo*
+TestTermInfo_init(TestTermInfo *self) {
+    return (TestTermInfo*)TestBatch_init((TestBatch*)self, 11);
+}
+
 void 
 test_freqfilepos(TestBatch *batch) {
     TermInfo* tinfo = TInfo_new(10);
@@ -55,10 +66,7 @@ test_freqfilepos(TestBatch *batch) {
 }
 
 void
-TestTermInfo_run_tests() {
-    TestBatch *batch = TestBatch_new(11);
-    TestBatch_Plan(batch);
+TestTermInfo_run_tests(TestTermInfo *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_freqfilepos(batch);
-
-    DECREF(batch);
 }

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Index/TestTermInfo.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Index/TestTermInfo.cfh b/core/Lucy/Test/Index/TestTermInfo.cfh
index 290936e..35f713e 100644
--- a/core/Lucy/Test/Index/TestTermInfo.cfh
+++ b/core/Lucy/Test/Index/TestTermInfo.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Index::TestTermInfo {
-    inert void
-    run_tests();
+class Lucy::Test::Index::TestTermInfo
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestTermInfo*
+    new();
+
+    inert TestTermInfo*
+    init(TestTermInfo *self);
+
+    void
+    Run_Tests(TestTermInfo *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestBitVector.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestBitVector.c b/core/Lucy/Test/Object/TestBitVector.c
index 673cb26..46868f6 100644
--- a/core/Lucy/Test/Object/TestBitVector.c
+++ b/core/Lucy/Test/Object/TestBitVector.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/TestUtils.h"
 #include "Lucy/Test/Object/TestBitVector.h"
 
+TestBitVector*
+TestBitVector_new() {
+    TestBitVector *self = (TestBitVector*)VTable_Make_Obj(TESTBITVECTOR);
+    return TestBitVector_init(self);
+}
+
+TestBitVector*
+TestBitVector_init(TestBitVector *self) {
+    return (TestBitVector*)TestBatch_init((TestBatch*)self, 1029);
+}
+
 static void
 test_Set_and_Get(TestBatch *batch) {
     unsigned i, max;
@@ -433,10 +444,8 @@ test_off_by_one_error() {
 }
 
 void
-TestBitVector_run_tests() {
-    TestBatch *batch = TestBatch_new(1029);
-
-    TestBatch_Plan(batch);
+TestBitVector_run_tests(TestBitVector *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Set_and_Get(batch);
     test_Flip(batch);
     test_Flip_Block_ascending(batch);
@@ -453,8 +462,6 @@ TestBitVector_run_tests() {
     test_Clone(batch);
     test_To_Array(batch);
     test_off_by_one_error();
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestBitVector.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestBitVector.cfh b/core/Lucy/Test/Object/TestBitVector.cfh
index 75a1222..c5fec53 100644
--- a/core/Lucy/Test/Object/TestBitVector.cfh
+++ b/core/Lucy/Test/Object/TestBitVector.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestBitVector {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestBitVector
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestBitVector*
+    new();
+
+    inert TestBitVector*
+    init(TestBitVector *self);
+
+    void
+    Run_Tests(TestBitVector *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestByteBuf.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestByteBuf.c b/core/Lucy/Test/Object/TestByteBuf.c
index c627262..ab7e7ed 100644
--- a/core/Lucy/Test/Object/TestByteBuf.c
+++ b/core/Lucy/Test/Object/TestByteBuf.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/TestUtils.h"
 #include "Lucy/Test/Object/TestByteBuf.h"
 
+TestByteBuf*
+TestBB_new() {
+    TestByteBuf *self = (TestByteBuf*)VTable_Make_Obj(TESTBYTEBUF);
+    return TestBB_init(self);
+}
+
+TestByteBuf*
+TestBB_init(TestByteBuf *self) {
+    return (TestByteBuf*)TestBatch_init((TestBatch*)self, 22);
+}
+
 static void
 test_Equals(TestBatch *batch) {
     ByteBuf *wanted = BB_new_bytes("foo", 4); // Include terminating NULL.
@@ -142,10 +153,8 @@ test_serialization(TestBatch *batch) {
 }
 
 void
-TestBB_run_tests() {
-    TestBatch *batch = TestBatch_new(22);
-    TestBatch_Plan(batch);
-
+TestBB_run_tests(TestByteBuf *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Equals(batch);
     test_Grow(batch);
     test_Clone(batch);
@@ -153,8 +162,6 @@ TestBB_run_tests() {
     test_Mimic(batch);
     test_Cat(batch);
     test_serialization(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestByteBuf.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestByteBuf.cfh b/core/Lucy/Test/Object/TestByteBuf.cfh
index d332a94..ea889ba 100644
--- a/core/Lucy/Test/Object/TestByteBuf.cfh
+++ b/core/Lucy/Test/Object/TestByteBuf.cfh
@@ -18,10 +18,16 @@ parcel Lucy;
 parcel Lucy;
 
 class Lucy::Test::Object::TestByteBuf cnick TestBB
-    inherits Clownfish::Obj {
+    inherits Lucy::Test::TestBatch {
 
-    inert void
-    run_tests();
+    inert incremented TestByteBuf*
+    new();
+
+    inert TestByteBuf*
+    init(TestByteBuf *self);
+
+    void
+    Run_Tests(TestByteBuf *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestCharBuf.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestCharBuf.c b/core/Lucy/Test/Object/TestCharBuf.c
index 6a71cf3..76f2793 100644
--- a/core/Lucy/Test/Object/TestCharBuf.c
+++ b/core/Lucy/Test/Object/TestCharBuf.c
@@ -26,6 +26,17 @@
 static char smiley[] = { (char)0xE2, (char)0x98, (char)0xBA, 0 };
 static uint32_t smiley_len = 3;
 
+TestCharBuf*
+TestCB_new() {
+    TestCharBuf *self = (TestCharBuf*)VTable_Make_Obj(TESTCHARBUF);
+    return TestCB_init(self);
+}
+
+TestCharBuf*
+TestCB_init(TestCharBuf *self) {
+    return (TestCharBuf*)TestBatch_init((TestBatch*)self, 55);
+}
+
 static CharBuf*
 S_get_cb(const char *string) {
     return CB_new_from_utf8(string, strlen(string));
@@ -393,10 +404,8 @@ test_serialization(TestBatch *batch) {
 }
 
 void
-TestCB_run_tests() {
-    TestBatch *batch = TestBatch_new(55);
-    TestBatch_Plan(batch);
-
+TestCB_run_tests(TestCharBuf *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_vcatf_s(batch);
     test_vcatf_null_string(batch);
     test_vcatf_cb(batch);
@@ -421,8 +430,6 @@ TestCB_run_tests() {
     test_To_F64(batch);
     test_To_I64(batch);
     test_serialization(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestCharBuf.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestCharBuf.cfh b/core/Lucy/Test/Object/TestCharBuf.cfh
index a920c13..c06e746 100644
--- a/core/Lucy/Test/Object/TestCharBuf.cfh
+++ b/core/Lucy/Test/Object/TestCharBuf.cfh
@@ -18,10 +18,16 @@ parcel Lucy;
 parcel Lucy;
 
 class Lucy::Test::Object::TestCharBuf cnick TestCB
-    inherits Clownfish::Obj {
+    inherits Lucy::Test::TestBatch {
 
-    inert void
-    run_tests();
+    inert incremented TestCharBuf*
+    new();
+
+    inert TestCharBuf*
+    init(TestCharBuf *self);
+
+    void
+    Run_Tests(TestCharBuf *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestErr.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestErr.c b/core/Lucy/Test/Object/TestErr.c
index 036b235..81d6cf4 100644
--- a/core/Lucy/Test/Object/TestErr.c
+++ b/core/Lucy/Test/Object/TestErr.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/Object/TestErr.h"
 #include "Clownfish/Err.h"
 
+TestErr*
+TestErr_new() {
+    TestErr *self = (TestErr*)VTable_Make_Obj(TESTERR);
+    return TestErr_init(self);
+}
+
+TestErr*
+TestErr_init(TestErr *self) {
+    return (TestErr*)TestBatch_init((TestBatch*)self, 1);
+}
+
 static void
 test_To_String(TestBatch *batch) {
     CharBuf *message = CB_newf("oops");
@@ -33,13 +44,9 @@ test_To_String(TestBatch *batch) {
 }
 
 void
-TestErr_run_tests() {
-    TestBatch *batch = TestBatch_new(1);
-
-    TestBatch_Plan(batch);
+TestErr_run_tests(TestErr *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_To_String(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestErr.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestErr.cfh b/core/Lucy/Test/Object/TestErr.cfh
index 9894e41..882c58f 100644
--- a/core/Lucy/Test/Object/TestErr.cfh
+++ b/core/Lucy/Test/Object/TestErr.cfh
@@ -16,8 +16,16 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestErr {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestErr
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestErr*
+    new();
+
+    inert TestErr*
+    init(TestErr *self);
+
+    void
+    Run_Tests(TestErr *self);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestHash.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestHash.c b/core/Lucy/Test/Object/TestHash.c
index 8fda2c5..dcf329c 100644
--- a/core/Lucy/Test/Object/TestHash.c
+++ b/core/Lucy/Test/Object/TestHash.c
@@ -23,6 +23,17 @@
 #include "Lucy/Test/Object/TestHash.h"
 #include "Clownfish/Hash.h"
 
+TestHash*
+TestHash_new() {
+    TestHash *self = (TestHash*)VTable_Make_Obj(TESTHASH);
+    return TestHash_init(self);
+}
+
+TestHash*
+TestHash_init(TestHash *self) {
+    return (TestHash*)TestBatch_init((TestBatch*)self, 29);
+}
+
 static void
 test_Equals(TestBatch *batch) {
     Hash *hash  = Hash_new(0);
@@ -260,20 +271,15 @@ test_stress(TestBatch *batch) {
 }
 
 void
-TestHash_run_tests() {
-    TestBatch *batch = TestBatch_new(29);
-
+TestHash_run_tests(TestHash *self) {
+    TestBatch *batch = (TestBatch*)self;
     srand((unsigned int)time((time_t*)NULL));
-
-    TestBatch_Plan(batch);
     test_Equals(batch);
     test_Store_and_Fetch(batch);
     test_Keys_Values_Iter(batch);
     test_Dump_and_Load(batch);
     test_serialization(batch);
     test_stress(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestHash.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestHash.cfh b/core/Lucy/Test/Object/TestHash.cfh
index c3cf509..681acb5 100644
--- a/core/Lucy/Test/Object/TestHash.cfh
+++ b/core/Lucy/Test/Object/TestHash.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestHash {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestHash
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestHash*
+    new();
+
+    inert TestHash*
+    init(TestHash *self);
+
+    void
+    Run_Tests(TestHash *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestI32Array.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestI32Array.c b/core/Lucy/Test/Object/TestI32Array.c
index 5dadc29..624dd06 100644
--- a/core/Lucy/Test/Object/TestI32Array.c
+++ b/core/Lucy/Test/Object/TestI32Array.c
@@ -23,6 +23,17 @@
 static int32_t source_ints[] = { -1, 0, INT32_MIN, INT32_MAX, 1 };
 static size_t num_ints = sizeof(source_ints) / sizeof(int32_t);
 
+TestI32Array*
+TestI32Arr_new() {
+    TestI32Array *self = (TestI32Array*)VTable_Make_Obj(TESTI32ARRAY);
+    return TestI32Arr_init(self);
+}
+
+TestI32Array*
+TestI32Arr_init(TestI32Array *self) {
+    return (TestI32Array*)TestBatch_init((TestBatch*)self, 4);
+}
+
 static void
 test_all(TestBatch *batch) {
     I32Array *i32_array = I32Arr_new(source_ints, num_ints);
@@ -58,13 +69,9 @@ test_all(TestBatch *batch) {
 }
 
 void
-TestI32Arr_run_tests() {
-    TestBatch *batch = TestBatch_new(4);
-
-    TestBatch_Plan(batch);
+TestI32Arr_run_tests(TestI32Array *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_all(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestI32Array.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestI32Array.cfh b/core/Lucy/Test/Object/TestI32Array.cfh
index 2d97741..0d24b1b 100644
--- a/core/Lucy/Test/Object/TestI32Array.cfh
+++ b/core/Lucy/Test/Object/TestI32Array.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestI32Array cnick TestI32Arr {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestI32Array cnick TestI32Arr
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestI32Array*
+    new();
+
+    inert TestI32Array*
+    init(TestI32Array *self);
+
+    void
+    Run_Tests(TestI32Array *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestLockFreeRegistry.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestLockFreeRegistry.c b/core/Lucy/Test/Object/TestLockFreeRegistry.c
index fc6baa3..c5c3d86 100644
--- a/core/Lucy/Test/Object/TestLockFreeRegistry.c
+++ b/core/Lucy/Test/Object/TestLockFreeRegistry.c
@@ -23,6 +23,17 @@
 #include "Lucy/Test/Object/TestLockFreeRegistry.h"
 #include "Clownfish/LockFreeRegistry.h"
 
+TestLockFreeRegistry*
+TestLFReg_new() {
+    TestLockFreeRegistry *self = (TestLockFreeRegistry*)VTable_Make_Obj(TESTLOCKFREEREGISTRY);
+    return TestLFReg_init(self);
+}
+
+TestLockFreeRegistry*
+TestLFReg_init(TestLockFreeRegistry *self) {
+    return (TestLockFreeRegistry*)TestBatch_init((TestBatch*)self, 6);
+}
+
 StupidHashCharBuf*
 StupidHashCharBuf_new(const char *text) {
     return (StupidHashCharBuf*)CB_new_from_utf8(text, strlen(text));
@@ -66,13 +77,9 @@ test_all(TestBatch *batch) {
 }
 
 void
-TestLFReg_run_tests() {
-    TestBatch *batch = TestBatch_new(6);
-
-    TestBatch_Plan(batch);
+TestLFReg_run_tests(TestLockFreeRegistry *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_all(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestLockFreeRegistry.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestLockFreeRegistry.cfh b/core/Lucy/Test/Object/TestLockFreeRegistry.cfh
index 297eb02..318c680 100644
--- a/core/Lucy/Test/Object/TestLockFreeRegistry.cfh
+++ b/core/Lucy/Test/Object/TestLockFreeRegistry.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestLockFreeRegistry cnick TestLFReg {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestLockFreeRegistry cnick TestLFReg
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestLockFreeRegistry*
+    new();
+
+    inert TestLockFreeRegistry*
+    init(TestLockFreeRegistry *self);
+
+    void
+    Run_Tests(TestLockFreeRegistry *self);
 }
 
 /** Private test-only class for stressing LockFreeRegistry.

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestNum.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestNum.c b/core/Lucy/Test/Object/TestNum.c
index 0d04acb..45c7c47 100644
--- a/core/Lucy/Test/Object/TestNum.c
+++ b/core/Lucy/Test/Object/TestNum.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/TestUtils.h"
 #include "Lucy/Test/Object/TestNum.h"
 
+TestNum*
+TestNum_new() {
+    TestNum *self = (TestNum*)VTable_Make_Obj(TESTNUM);
+    return TestNum_init(self);
+}
+
+TestNum*
+TestNum_init(TestNum *self) {
+    return (TestNum*)TestBatch_init((TestBatch*)self, 58);
+}
+
 static void
 test_To_String(TestBatch *batch) {
     Float32   *f32 = Float32_new(1.33f);
@@ -296,18 +307,14 @@ test_serialization(TestBatch *batch) {
 }
 
 void
-TestNum_run_tests() {
-    TestBatch *batch = TestBatch_new(58);
-    TestBatch_Plan(batch);
-
+TestNum_run_tests(TestNum *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_To_String(batch);
     test_accessors(batch);
     test_Equals_and_Compare_To(batch);
     test_Clone(batch);
     test_Mimic(batch);
     test_serialization(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestNum.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestNum.cfh b/core/Lucy/Test/Object/TestNum.cfh
index 00bd522..ba8b64b 100644
--- a/core/Lucy/Test/Object/TestNum.cfh
+++ b/core/Lucy/Test/Object/TestNum.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestNum {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestNum
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestNum*
+    new();
+
+    inert TestNum*
+    init(TestNum *self);
+
+    void
+    Run_Tests(TestNum *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestObj.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestObj.c b/core/Lucy/Test/Object/TestObj.c
index 35984f4..bdcad17 100644
--- a/core/Lucy/Test/Object/TestObj.c
+++ b/core/Lucy/Test/Object/TestObj.c
@@ -22,6 +22,17 @@
 #include "Lucy/Test.h"
 #include "Lucy/Test/Object/TestObj.h"
 
+TestObj*
+TestObj_new() {
+    TestObj *self = (TestObj*)VTable_Make_Obj(TESTOBJ);
+    return TestObj_init(self);
+}
+
+TestObj*
+TestObj_init(TestObj *self) {
+    return (TestObj*)TestBatch_init((TestBatch*)self, 20);
+}
+
 static Obj*
 S_new_testobj() {
     ZombieCharBuf *klass = ZCB_WRAP_STR("TestObj", 7);
@@ -185,11 +196,8 @@ test_abstract_routines(TestBatch *batch) {
 }
 
 void
-TestObj_run_tests() {
-    TestBatch *batch = TestBatch_new(20);
-
-    TestBatch_Plan(batch);
-
+TestObj_run_tests(TestObj *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_refcounts(batch);
     test_To_String(batch);
     test_Dump(batch);
@@ -197,8 +205,6 @@ TestObj_run_tests() {
     test_Hash_Sum(batch);
     test_Is_A(batch);
     test_abstract_routines(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestObj.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestObj.cfh b/core/Lucy/Test/Object/TestObj.cfh
index a8c97a8..47c7c01 100644
--- a/core/Lucy/Test/Object/TestObj.cfh
+++ b/core/Lucy/Test/Object/TestObj.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestObj {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestObj
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestObj*
+    new();
+
+    inert TestObj*
+    init(TestObj *self);
+
+    void
+    Run_Tests(TestObj *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestVArray.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestVArray.c b/core/Lucy/Test/Object/TestVArray.c
index 5e2c8ef..2abdc88 100644
--- a/core/Lucy/Test/Object/TestVArray.c
+++ b/core/Lucy/Test/Object/TestVArray.c
@@ -21,6 +21,17 @@
 #include "Lucy/Test/TestUtils.h"
 #include "Lucy/Test/Object/TestVArray.h"
 
+TestVArray*
+TestVArray_new() {
+    TestVArray *self = (TestVArray*)VTable_Make_Obj(TESTVARRAY);
+    return TestVArray_init(self);
+}
+
+TestVArray*
+TestVArray_init(TestVArray *self) {
+    return (TestVArray*)TestBatch_init((TestBatch*)self, 45);
+}
+
 static CharBuf*
 S_new_cb(const char *text) {
     return CB_new_from_utf8(text, strlen(text));
@@ -315,11 +326,8 @@ test_serialization(TestBatch *batch) {
 }
 
 void
-TestVArray_run_tests() {
-    TestBatch *batch = TestBatch_new(45);
-
-    TestBatch_Plan(batch);
-
+TestVArray_run_tests(TestVArray *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Equals(batch);
     test_Store_Fetch(batch);
     test_Push_Pop_Shift_Unshift(batch);
@@ -331,8 +339,6 @@ TestVArray_run_tests() {
     test_Clone_and_Shallow_Copy(batch);
     test_Dump_and_Load(batch);
     test_serialization(batch);
-
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Object/TestVArray.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Object/TestVArray.cfh b/core/Lucy/Test/Object/TestVArray.cfh
index 597d472..917833e 100644
--- a/core/Lucy/Test/Object/TestVArray.cfh
+++ b/core/Lucy/Test/Object/TestVArray.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Object::TestVArray {
-    inert void
-    run_tests();
+class Lucy::Test::Object::TestVArray
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestVArray*
+    new();
+
+    inert TestVArray*
+    init(TestVArray *self);
+
+    void
+    Run_Tests(TestVArray *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestBlobType.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestBlobType.c b/core/Lucy/Test/Plan/TestBlobType.c
index a52121d..bc846a0 100644
--- a/core/Lucy/Test/Plan/TestBlobType.c
+++ b/core/Lucy/Test/Plan/TestBlobType.c
@@ -22,6 +22,17 @@
 #include "Lucy/Test/TestUtils.h"
 #include "Lucy/Plan/BlobType.h"
 
+TestBlobType*
+TestBlobType_new() {
+    TestBlobType *self = (TestBlobType*)VTable_Make_Obj(TESTBLOBTYPE);
+    return TestBlobType_init(self);
+}
+
+TestBlobType*
+TestBlobType_init(TestBlobType *self) {
+    return (TestBlobType*)TestBatch_init((TestBatch*)self, 2);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     BlobType *type            = BlobType_new(true);
@@ -43,11 +54,9 @@ test_Dump_Load_and_Equals(TestBatch *batch) {
 }
 
 void
-TestBlobType_run_tests() {
-    TestBatch *batch = TestBatch_new(2);
-    TestBatch_Plan(batch);
+TestBlobType_run_tests(TestBlobType *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestBlobType.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestBlobType.cfh b/core/Lucy/Test/Plan/TestBlobType.cfh
index c1255ae..7c4567e 100644
--- a/core/Lucy/Test/Plan/TestBlobType.cfh
+++ b/core/Lucy/Test/Plan/TestBlobType.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Plan::TestBlobType {
-    inert void
-    run_tests();
+class Lucy::Test::Plan::TestBlobType
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestBlobType*
+    new();
+
+    inert TestBlobType*
+    init(TestBlobType *self);
+
+    void
+    Run_Tests(TestBlobType *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestFieldMisc.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFieldMisc.c b/core/Lucy/Test/Plan/TestFieldMisc.c
index bde6510..4904dcb 100644
--- a/core/Lucy/Test/Plan/TestFieldMisc.c
+++ b/core/Lucy/Test/Plan/TestFieldMisc.c
@@ -41,6 +41,17 @@ static CharBuf *unindexed_but_analyzed_cb;
 static CharBuf *unindexed_unanalyzed_cb;
 static CharBuf *united_states_cb;
 
+TestFieldMisc*
+TestFieldMisc_new() {
+    TestFieldMisc *self = (TestFieldMisc*)VTable_Make_Obj(TESTFIELDMISC);
+    return TestFieldMisc_init(self);
+}
+
+TestFieldMisc*
+TestFieldMisc_init(TestFieldMisc *self) {
+    return (TestFieldMisc*)TestBatch_init((TestBatch*)self, 20);
+}
+
 static void
 S_init_strings() {
     analyzed_cb               = CB_newf("analyzed");
@@ -229,14 +240,12 @@ test_many_fields(TestBatch *batch) {
 }
 
 void
-TestFieldMisc_run_tests() {
-    TestBatch *batch = TestBatch_new(20);
-    TestBatch_Plan(batch);
+TestFieldMisc_run_tests(TestFieldMisc *self) {
+    TestBatch *batch = (TestBatch*)self;
     S_init_strings();
     test_spec_field(batch);
     test_many_fields(batch);
     S_destroy_strings();
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestFieldMisc.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFieldMisc.cfh b/core/Lucy/Test/Plan/TestFieldMisc.cfh
index 54a4a55..c57cdb0 100644
--- a/core/Lucy/Test/Plan/TestFieldMisc.cfh
+++ b/core/Lucy/Test/Plan/TestFieldMisc.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Plan::TestFieldMisc {
-    inert void
-    run_tests();
+class Lucy::Test::Plan::TestFieldMisc
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestFieldMisc*
+    new();
+
+    inert TestFieldMisc*
+    init(TestFieldMisc *self);
+
+    void
+    Run_Tests(TestFieldMisc *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestFieldType.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFieldType.c b/core/Lucy/Test/Plan/TestFieldType.c
index bb2e41a..3421e79 100644
--- a/core/Lucy/Test/Plan/TestFieldType.c
+++ b/core/Lucy/Test/Plan/TestFieldType.c
@@ -22,6 +22,17 @@
 #include "Lucy/Test/Plan/TestFieldType.h"
 #include "Lucy/Test/TestUtils.h"
 
+TestFieldType*
+TestFType_new() {
+    TestFieldType *self = (TestFieldType*)VTable_Make_Obj(TESTFIELDTYPE);
+    return TestFType_init(self);
+}
+
+TestFieldType*
+TestFType_init(TestFieldType *self) {
+    return (TestFieldType*)TestBatch_init((TestBatch*)self, 9);
+}
+
 DummyFieldType*
 DummyFieldType_new() {
     DummyFieldType *self = (DummyFieldType*)VTable_Make_Obj(DUMMYFIELDTYPE);
@@ -93,12 +104,10 @@ test_Compare_Values(TestBatch *batch) {
 }
 
 void
-TestFType_run_tests() {
-    TestBatch *batch = TestBatch_new(9);
-    TestBatch_Plan(batch);
+TestFType_run_tests(TestFieldType *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_Compare_Values(batch);
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestFieldType.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFieldType.cfh b/core/Lucy/Test/Plan/TestFieldType.cfh
index 597201e..e9c7e31 100644
--- a/core/Lucy/Test/Plan/TestFieldType.cfh
+++ b/core/Lucy/Test/Plan/TestFieldType.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Plan::TestFieldType cnick TestFType {
-    inert void
-    run_tests();
+class Lucy::Test::Plan::TestFieldType cnick TestFType
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestFieldType*
+    new();
+
+    inert TestFieldType*
+    init(TestFieldType *self);
+
+    void
+    Run_Tests(TestFieldType *self);
 }
 
 class Lucy::Test::Plan::DummyFieldType inherits Lucy::Plan::FieldType {

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestFullTextType.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFullTextType.c b/core/Lucy/Test/Plan/TestFullTextType.c
index 5902dbd..ba6cf26 100644
--- a/core/Lucy/Test/Plan/TestFullTextType.c
+++ b/core/Lucy/Test/Plan/TestFullTextType.c
@@ -24,6 +24,17 @@
 #include "Lucy/Analysis/Normalizer.h"
 #include "Lucy/Analysis/StandardTokenizer.h"
 
+TestFullTextType*
+TestFullTextType_new() {
+    TestFullTextType *self = (TestFullTextType*)VTable_Make_Obj(TESTFULLTEXTTYPE);
+    return TestFullTextType_init(self);
+}
+
+TestFullTextType*
+TestFullTextType_init(TestFullTextType *self) {
+    return (TestFullTextType*)TestBatch_init((TestBatch*)self, 10);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     StandardTokenizer *tokenizer     = StandardTokenizer_new();
@@ -98,12 +109,10 @@ test_Compare_Values(TestBatch *batch) {
 }
 
 void
-TestFullTextType_run_tests() {
-    TestBatch *batch = TestBatch_new(10);
-    TestBatch_Plan(batch);
+TestFullTextType_run_tests(TestFullTextType *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
     test_Compare_Values(batch);
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestFullTextType.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestFullTextType.cfh b/core/Lucy/Test/Plan/TestFullTextType.cfh
index 40810dd..c40f870 100644
--- a/core/Lucy/Test/Plan/TestFullTextType.cfh
+++ b/core/Lucy/Test/Plan/TestFullTextType.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Plan::TestFullTextType {
-    inert void
-    run_tests();
+class Lucy::Test::Plan::TestFullTextType
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestFullTextType*
+    new();
+
+    inert TestFullTextType*
+    init(TestFullTextType *self);
+
+    void
+    Run_Tests(TestFullTextType *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestNumericType.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestNumericType.c b/core/Lucy/Test/Plan/TestNumericType.c
index 18ff082..e85fbd6 100644
--- a/core/Lucy/Test/Plan/TestNumericType.c
+++ b/core/Lucy/Test/Plan/TestNumericType.c
@@ -23,6 +23,17 @@
 #include "Lucy/Plan/BlobType.h"
 #include "Lucy/Plan/NumericType.h"
 
+TestNumericType*
+TestNumericType_new() {
+    TestNumericType *self = (TestNumericType*)VTable_Make_Obj(TESTNUMERICTYPE);
+    return TestNumericType_init(self);
+}
+
+TestNumericType*
+TestNumericType_init(TestNumericType *self) {
+    return (TestNumericType*)TestBatch_init((TestBatch*)self, 12);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     Int32Type   *i32 = Int32Type_new();
@@ -93,11 +104,9 @@ test_Dump_Load_and_Equals(TestBatch *batch) {
 }
 
 void
-TestNumericType_run_tests() {
-    TestBatch *batch = TestBatch_new(12);
-    TestBatch_Plan(batch);
+TestNumericType_run_tests(TestNumericType *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
-    DECREF(batch);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Plan/TestNumericType.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Plan/TestNumericType.cfh b/core/Lucy/Test/Plan/TestNumericType.cfh
index 1650ce6..89cf200 100644
--- a/core/Lucy/Test/Plan/TestNumericType.cfh
+++ b/core/Lucy/Test/Plan/TestNumericType.cfh
@@ -16,9 +16,17 @@
 
 parcel Lucy;
 
-inert class Lucy::Test::Plan::TestNumericType {
-    inert void
-    run_tests();
+class Lucy::Test::Plan::TestNumericType
+    inherits Lucy::Test::TestBatch {
+
+    inert incremented TestNumericType*
+    new();
+
+    inert TestNumericType*
+    init(TestNumericType *self);
+
+    void
+    Run_Tests(TestNumericType *self);
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/c6b07c3a/core/Lucy/Test/Search/TestLeafQuery.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Search/TestLeafQuery.c b/core/Lucy/Test/Search/TestLeafQuery.c
index 095a678..ff8194d 100644
--- a/core/Lucy/Test/Search/TestLeafQuery.c
+++ b/core/Lucy/Test/Search/TestLeafQuery.c
@@ -23,6 +23,17 @@
 #include "Lucy/Test/TestUtils.h"
 #include "Lucy/Search/LeafQuery.h"
 
+TestLeafQuery*
+TestLeafQuery_new() {
+    TestLeafQuery *self = (TestLeafQuery*)VTable_Make_Obj(TESTLEAFQUERY);
+    return TestLeafQuery_init(self);
+}
+
+TestLeafQuery*
+TestLeafQuery_init(TestLeafQuery *self) {
+    return (TestLeafQuery*)TestBatch_init((TestBatch*)self, 5);
+}
+
 static void
 test_Dump_Load_and_Equals(TestBatch *batch) {
     LeafQuery *query         = TestUtils_make_leaf_query("content", "foo");
@@ -55,11 +66,9 @@ test_Dump_Load_and_Equals(TestBatch *batch) {
 }
 
 void
-TestLeafQuery_run_tests() {
-    TestBatch *batch = TestBatch_new(5);
-    TestBatch_Plan(batch);
+TestLeafQuery_run_tests(TestLeafQuery *self) {
+    TestBatch *batch = (TestBatch*)self;
     test_Dump_Load_and_Equals(batch);
-    DECREF(batch);
 }