OPENNLP-1002 Remove deprecated GIS class
Project: http://git-wip-us.apache.org/repos/asf/opennlp/repo Commit: http://git-wip-us.apache.org/repos/asf/opennlp/commit/91c4baae Tree: http://git-wip-us.apache.org/repos/asf/opennlp/tree/91c4baae Diff: http://git-wip-us.apache.org/repos/asf/opennlp/diff/91c4baae Branch: refs/heads/parser_regression Commit: 91c4baaecfae3c88d30ea14a04dafa63dab191e7 Parents: 6b910d5 Author: Jörn Kottmann <jo...@apache.org> Authored: Sun Mar 12 11:10:43 2017 +0100 Committer: Jörn Kottmann <jo...@apache.org> Committed: Thu Apr 20 12:40:23 2017 +0200 ---------------------------------------------------------------------- .../cmdline/parser/BuildModelUpdaterTool.java | 7 +- .../cmdline/parser/CheckModelUpdaterTool.java | 7 +- .../main/java/opennlp/tools/ml/maxent/GIS.java | 303 ------------------- .../tools/ml/maxent/GISIndexingTest.java | 78 +++-- .../tools/ml/maxent/ScaleDoesntMatterTest.java | 20 +- 5 files changed, 80 insertions(+), 335 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/opennlp/blob/91c4baae/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterTool.java ---------------------------------------------------------------------- diff --git a/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterTool.java b/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterTool.java index 327355b..7efd342 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterTool.java +++ b/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterTool.java @@ -20,7 +20,8 @@ package opennlp.tools.cmdline.parser; import java.io.IOException; import opennlp.tools.dictionary.Dictionary; -import opennlp.tools.ml.maxent.GIS; +import opennlp.tools.ml.EventTrainer; +import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.parser.Parse; @@ -28,6 +29,7 @@ import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.chunking.ParserEventStream; import opennlp.tools.util.ObjectStream; +import opennlp.tools.util.model.ModelUtil; public final class BuildModelUpdaterTool extends ModelUpdaterTool { @@ -50,7 +52,8 @@ public final class BuildModelUpdaterTool extends ModelUpdaterTool { ObjectStream<Event> bes = new ParserEventStream(parseSamples, originalModel.getHeadRules(), ParserEventTypeEnum.BUILD, mdict); - GIS trainer = new GIS(); + EventTrainer trainer = TrainerFactory.getEventTrainer( + ModelUtil.createDefaultTrainingParameters(), null); MaxentModel buildModel = trainer.train(bes); parseSamples.close(); http://git-wip-us.apache.org/repos/asf/opennlp/blob/91c4baae/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterTool.java ---------------------------------------------------------------------- diff --git a/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterTool.java b/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterTool.java index 55e96ba..0c98812 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterTool.java +++ b/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterTool.java @@ -20,7 +20,8 @@ package opennlp.tools.cmdline.parser; import java.io.IOException; import opennlp.tools.dictionary.Dictionary; -import opennlp.tools.ml.maxent.GIS; +import opennlp.tools.ml.EventTrainer; +import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.parser.Parse; @@ -28,6 +29,7 @@ import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.chunking.ParserEventStream; import opennlp.tools.util.ObjectStream; +import opennlp.tools.util.model.ModelUtil; // trains a new check model ... public final class CheckModelUpdaterTool extends ModelUpdaterTool { @@ -51,7 +53,8 @@ public final class CheckModelUpdaterTool extends ModelUpdaterTool { ObjectStream<Event> bes = new ParserEventStream(parseSamples, originalModel.getHeadRules(), ParserEventTypeEnum.CHECK, mdict); - GIS trainer = new GIS(); + EventTrainer trainer = TrainerFactory.getEventTrainer( + ModelUtil.createDefaultTrainingParameters(), null); MaxentModel checkModel = trainer.train(bes); parseSamples.close(); http://git-wip-us.apache.org/repos/asf/opennlp/blob/91c4baae/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GIS.java ---------------------------------------------------------------------- diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GIS.java b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GIS.java deleted file mode 100644 index 97c214d..0000000 --- a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GIS.java +++ /dev/null @@ -1,303 +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. - */ - -package opennlp.tools.ml.maxent; - -import java.io.IOException; - -import opennlp.tools.ml.AbstractEventTrainer; -import opennlp.tools.ml.model.AbstractModel; -import opennlp.tools.ml.model.DataIndexer; -import opennlp.tools.ml.model.Event; -import opennlp.tools.ml.model.Prior; -import opennlp.tools.ml.model.UniformPrior; -import opennlp.tools.util.ObjectStream; -import opennlp.tools.util.TrainingParameters; - -/** - * A Factory class which uses instances of GISTrainer to create and train - * GISModels. - * @deprecated use {@link GISTrainer} - */ -@Deprecated -public class GIS extends AbstractEventTrainer { - - public static final String MAXENT_VALUE = "MAXENT"; - - /** - * Set this to false if you don't want messages about the progress of model - * training displayed. Alternately, you can use the overloaded version of - * trainModel() to conditionally enable progress messages. - */ - public static boolean PRINT_MESSAGES = true; - - /** - * If we are using smoothing, this is used as the "number" of times we want - * the trainer to imagine that it saw a feature that it actually didn't see. - * Defaulted to 0.1. - */ - private static final double SMOOTHING_OBSERVATION = 0.1; - - private static final String SMOOTHING_PARAM = "smoothing"; - private static final boolean SMOOTHING_DEFAULT = false; - - public GIS() { - } - - public GIS(TrainingParameters parameters) { - super(parameters); - } - - public boolean isValid() { - - if (!super.isValid()) { - return false; - } - - String algorithmName = getAlgorithm(); - - return !(algorithmName != null && !(MAXENT_VALUE.equals(algorithmName))); - } - - public boolean isSortAndMerge() { - return true; - } - - public AbstractModel doTrain(DataIndexer indexer) throws IOException { - int iterations = getIterations(); - - AbstractModel model; - - boolean printMessages = trainingParameters.getBooleanParameter(VERBOSE_PARAM, VERBOSE_DEFAULT); - boolean smoothing = trainingParameters.getBooleanParameter(SMOOTHING_PARAM, SMOOTHING_DEFAULT); - int threads = trainingParameters.getIntParameter(TrainingParameters.THREADS_PARAM, 1); - - model = trainModel(iterations, indexer, printMessages, smoothing, null, threads); - - return model; - } - - // << members related to AbstractEventTrainer - - /** - * Train a model using the GIS algorithm, assuming 100 iterations and no - * cutoff. - * - * @param eventStream - * The EventStream holding the data on which this model will be - * trained. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(ObjectStream<Event> eventStream) throws IOException { - return trainModel(eventStream, 100, 0, false, PRINT_MESSAGES); - } - - /** - * Train a model using the GIS algorithm, assuming 100 iterations and no - * cutoff. - * - * @param eventStream - * The EventStream holding the data on which this model will be - * trained. - * @param smoothing - * Defines whether the created trainer will use smoothing while - * training the model. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(ObjectStream<Event> eventStream, boolean smoothing) - throws IOException { - return trainModel(eventStream, 100, 0, smoothing, PRINT_MESSAGES); - } - - /** - * Train a model using the GIS algorithm. - * - * @param eventStream - * The EventStream holding the data on which this model will be - * trained. - * @param iterations - * The number of GIS iterations to perform. - * @param cutoff - * The number of times a feature must be seen in order to be relevant - * for training. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(ObjectStream<Event> eventStream, int iterations, - int cutoff) throws IOException { - return trainModel(eventStream, iterations, cutoff, false, PRINT_MESSAGES); - } - - /** - * Train a model using the GIS algorithm. - * - * @param eventStream - * The EventStream holding the data on which this model will be - * trained. - * @param iterations - * The number of GIS iterations to perform. - * @param cutoff - * The number of times a feature must be seen in order to be relevant - * for training. - * @param smoothing - * Defines whether the created trainer will use smoothing while - * training the model. - * @param printMessagesWhileTraining - * Determines whether training status messages are written to STDOUT. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(ObjectStream<Event> eventStream, int iterations, - int cutoff, boolean smoothing, boolean printMessagesWhileTraining) - throws IOException { - GISTrainer trainer = new GISTrainer(printMessagesWhileTraining); - trainer.setSmoothing(smoothing); - trainer.setSmoothingObservation(SMOOTHING_OBSERVATION); - return trainer.trainModel(eventStream, iterations, cutoff); - } - - /** - * Train a model using the GIS algorithm. - * - * @param eventStream - * The EventStream holding the data on which this model will be - * trained. - * @param iterations - * The number of GIS iterations to perform. - * @param cutoff - * The number of times a feature must be seen in order to be relevant - * for training. - * @param sigma - * The standard deviation for the gaussian smoother. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(ObjectStream<Event> eventStream, int iterations, - int cutoff, double sigma) throws IOException { - GISTrainer trainer = new GISTrainer(PRINT_MESSAGES); - if (sigma > 0) { - trainer.setGaussianSigma(sigma); - } - return trainer.trainModel(eventStream, iterations, cutoff); - } - - /** - * Train a model using the GIS algorithm. - * - * @param iterations - * The number of GIS iterations to perform. - * @param indexer - * The object which will be used for event compilation. - * @param smoothing - * Defines whether the created trainer will use smoothing while - * training the model. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(int iterations, DataIndexer indexer, boolean smoothing) { - return trainModel(iterations, indexer, true, smoothing, null, 1); - } - - /** - * Train a model using the GIS algorithm. - * - * @param iterations - * The number of GIS iterations to perform. - * @param indexer - * The object which will be used for event compilation. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(int iterations, DataIndexer indexer) { - return trainModel(iterations, indexer, true, false, null, 1); - } - - /** - * Train a model using the GIS algorithm with the specified number of - * iterations, data indexer, and prior. - * - * @param iterations - * The number of GIS iterations to perform. - * @param indexer - * The object which will be used for event compilation. - * @param modelPrior - * The prior distribution for the model. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(int iterations, DataIndexer indexer, - Prior modelPrior, int cutoff) { - return trainModel(iterations, indexer, true, false, modelPrior, cutoff); - } - - /** - * Train a model using the GIS algorithm. - * - * @param iterations - * The number of GIS iterations to perform. - * @param indexer - * The object which will be used for event compilation. - * @param printMessagesWhileTraining - * Determines whether training status messages are written to STDOUT. - * @param smoothing - * Defines whether the created trainer will use smoothing while - * training the model. - * @param modelPrior - * The prior distribution for the model. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(int iterations, DataIndexer indexer, - boolean printMessagesWhileTraining, boolean smoothing, - Prior modelPrior) { - return trainModel(iterations, indexer, printMessagesWhileTraining, smoothing, modelPrior, 1); - } - - /** - * Train a model using the GIS algorithm. - * - * @param iterations - * The number of GIS iterations to perform. - * @param indexer - * The object which will be used for event compilation. - * @param printMessagesWhileTraining - * Determines whether training status messages are written to STDOUT. - * @param smoothing - * Defines whether the created trainer will use smoothing while - * training the model. - * @param modelPrior - * The prior distribution for the model. - * @return The newly trained model, which can be used immediately or saved to - * disk using an opennlp.tools.ml.maxent.io.GISModelWriter object. - */ - public static GISModel trainModel(int iterations, DataIndexer indexer, - boolean printMessagesWhileTraining, boolean smoothing, - Prior modelPrior, int threads) { - GISTrainer trainer = new GISTrainer(printMessagesWhileTraining); - trainer.setSmoothing(smoothing); - trainer.setSmoothingObservation(SMOOTHING_OBSERVATION); - if (modelPrior == null) { - modelPrior = new UniformPrior(); - } - return trainer.trainModel(iterations, indexer, modelPrior, threads); - } -} - - - http://git-wip-us.apache.org/repos/asf/opennlp/blob/91c4baae/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISIndexingTest.java ---------------------------------------------------------------------- diff --git a/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISIndexingTest.java b/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISIndexingTest.java index 6922603..c8bc27f 100644 --- a/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISIndexingTest.java +++ b/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISIndexingTest.java @@ -17,6 +17,7 @@ package opennlp.tools.ml.maxent; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -26,6 +27,7 @@ import org.junit.Assert; import org.junit.Test; import opennlp.tools.ml.AbstractEventTrainer; +import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.maxent.quasinewton.QNTrainer; @@ -36,6 +38,7 @@ import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.TrainingParameters; +import opennlp.tools.util.model.ModelUtil; public class GISIndexingTest { @@ -58,40 +61,63 @@ public class GISIndexingTest { * Test the GIS.trainModel(ObjectStream<Event> eventStream) method */ @Test - public void testGISTrainSignature1() throws Exception { - ObjectStream<Event> eventStream = createEventStream(); - Assert.assertNotNull(GIS.trainModel(eventStream)); - eventStream.close(); + public void testGISTrainSignature1() throws IOException { + try (ObjectStream<Event> eventStream = createEventStream()) { + TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); + params.put(AbstractTrainer.CUTOFF_PARAM, "1"); + + EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); + + Assert.assertNotNull(trainer.train(eventStream)); + } } /* * Test the GIS.trainModel(ObjectStream<Event> eventStream,boolean smoothing) method */ @Test - public void testGISTrainSignature2() throws Exception { - ObjectStream<Event> eventStream = createEventStream(); - Assert.assertNotNull(GIS.trainModel(eventStream,true)); - eventStream.close(); + public void testGISTrainSignature2() throws IOException { + try (ObjectStream<Event> eventStream = createEventStream()) { + TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); + params.put(AbstractTrainer.CUTOFF_PARAM, "1"); + params.put("smoothing", "true"); + EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); + + Assert.assertNotNull(trainer.train(eventStream)); + } } /* * Test the GIS.trainModel(ObjectStream<Event> eventStream, int iterations, int cutoff) method */ @Test - public void testGISTrainSignature3() throws Exception { - ObjectStream<Event> eventStream = createEventStream(); - Assert.assertNotNull(GIS.trainModel(eventStream,10,1)); - eventStream.close(); + public void testGISTrainSignature3() throws IOException { + try (ObjectStream<Event> eventStream = createEventStream()) { + TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); + + params.put(AbstractTrainer.ITERATIONS_PARAM, "10"); + params.put(AbstractTrainer.CUTOFF_PARAM, "1"); + + EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); + + Assert.assertNotNull(trainer.train(eventStream)); + } } /* * Test the GIS.trainModel(ObjectStream<Event> eventStream, int iterations, int cutoff, double sigma) method */ @Test - public void testGISTrainSignature4() throws Exception { - ObjectStream<Event> eventStream = createEventStream(); - Assert.assertNotNull(GIS.trainModel(eventStream,10,1,0.01)); - eventStream.close(); + public void testGISTrainSignature4() throws IOException { + try (ObjectStream<Event> eventStream = createEventStream()) { + TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); + params.put(AbstractTrainer.ITERATIONS_PARAM, "10"); + params.put(AbstractTrainer.CUTOFF_PARAM, "1"); + GISTrainer trainer = (GISTrainer) TrainerFactory.getEventTrainer(params, null); + trainer.setGaussianSigma(0.01); + + Assert.assertNotNull(trainer.trainModel(eventStream)); + } } /* @@ -99,14 +125,22 @@ public class GISIndexingTest { * boolean smoothing, boolean printMessagesWhileTraining)) method */ @Test - public void testGISTrainSignature5() throws Exception { - ObjectStream<Event> eventStream = createEventStream(); - Assert.assertNotNull(GIS.trainModel(eventStream,10,1,false,false)); - eventStream.close(); + public void testGISTrainSignature5() throws IOException { + try (ObjectStream<Event> eventStream = createEventStream()) { + TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); + + params.put(AbstractTrainer.ITERATIONS_PARAM, "10"); + params.put(AbstractTrainer.CUTOFF_PARAM, "1"); + params.put("smoothing", "false"); + params.put(AbstractTrainer.VERBOSE_PARAM, "false"); + + EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); + Assert.assertNotNull(trainer.train(eventStream)); + } } @Test - public void testIndexingWithTrainingParameters() throws Exception { + public void testIndexingWithTrainingParameters() throws IOException { ObjectStream<Event> eventStream = createEventStream(); TrainingParameters parameters = TrainingParameters.defaultParams(); @@ -147,7 +181,7 @@ public class GISIndexingTest { } @Test - public void testIndexingFactory() throws Exception { + public void testIndexingFactory() throws IOException { Map<String,String> myReportMap = new HashMap<>(); ObjectStream<Event> eventStream = createEventStream(); http://git-wip-us.apache.org/repos/asf/opennlp/blob/91c4baae/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.java ---------------------------------------------------------------------- diff --git a/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.java b/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.java index 76a4813..1e5c8a3 100644 --- a/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.java +++ b/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.java @@ -25,6 +25,8 @@ import org.junit.Before; import org.junit.Test; import opennlp.tools.ml.AbstractTrainer; +import opennlp.tools.ml.EventTrainer; +import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; @@ -34,6 +36,7 @@ import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; +import opennlp.tools.util.model.ModelUtil; public class ScaleDoesntMatterTest { @@ -52,7 +55,6 @@ public class ScaleDoesntMatterTest { * predicates doesn't matter when it comes the probability assigned to each * outcome. Strangely, if we use (1,2) and (10,20) there's no difference. If * we use (0.1,0.2) and (10,20) there is a difference. - * */ @Test public void testScaleResults() throws Exception { @@ -68,8 +70,11 @@ public class ScaleDoesntMatterTest { new PlainTextByLineStream(new MockInputStreamFactory(smallValues), StandardCharsets.UTF_8)); testDataIndexer.index(smallEventStream); - MaxentModel smallModel = GIS.trainModel(100, - testDataIndexer, false); + + EventTrainer smallModelTrainer = TrainerFactory.getEventTrainer( + ModelUtil.createDefaultTrainingParameters(), null); + + MaxentModel smallModel = smallModelTrainer.train(testDataIndexer); String[] contexts = smallTest.split(" "); float[] values = RealValueFileEventStream.parseContexts(contexts); double[] smallResults = smallModel.eval(contexts, values); @@ -81,13 +86,16 @@ public class ScaleDoesntMatterTest { new PlainTextByLineStream(new MockInputStreamFactory(largeValues), StandardCharsets.UTF_8)); testDataIndexer.index(largeEventStream); - MaxentModel largeModel = GIS.trainModel(100, - testDataIndexer, false); + + EventTrainer largeModelTrainer = TrainerFactory.getEventTrainer( + ModelUtil.createDefaultTrainingParameters(), null); + + MaxentModel largeModel = largeModelTrainer.train(testDataIndexer); contexts = largeTest.split(" "); values = RealValueFileEventStream.parseContexts(contexts); double[] largeResults = largeModel.eval(contexts, values); - String largeResultString = smallModel.getAllOutcomes(largeResults); + String largeResultString = largeModel.getAllOutcomes(largeResults); System.out.println("largeResults: " + largeResultString); Assert.assertEquals(smallResults.length, largeResults.length);