private int testRecordResultCompute(String[][] wordresults) { int nbDuplicateFound = 0; // prepare wordresults List<List<WordResult>> wordResults = new ArrayList<List<WordResult>>(); for (String[] elts : wordresults) { List<WordResult> wrs = new ArrayList<WordResult>(); for (String elt : elts) { WordResult wr = new WordResult(); wr.input = "input " + elt; wr.word = "word " + elt; wr.score = Integer.valueOf(elt); wrs.add(wr); } wordResults.add(wrs); } // --- compute output results as a list RecordResult recRes = new RecordResult(); recRes.record = initializeRecordToSearch(wordresults); recRes.wordResults.addAll(wordResults); List<OutputRecord> expectedOutputRows = null; expectedOutputRows = new ArrayList<OutputRecord>(); SynonymRecordSearcher.RecordResult.computeOutputRows( wordresults.length, new ArrayList<WordResult>(), recRes.wordResults, expectedOutputRows); for (OutputRecord outputRecord : expectedOutputRows) { System.out.println(outputRecord); } // --- test that duplicates are removed when using a set instead of a list Set<OutputRecord> uniques = new HashSet<OutputRecord>(); uniques.addAll(expectedOutputRows); Assert.assertTrue(uniques.size() <= expectedOutputRows.size()); if (uniques.size() < expectedOutputRows.size()) { nbDuplicateFound++; } List<OutputRecord> outputRows = recRes.computeOutputRows(); // --- check some assertions // verify number of results int expectedNbOutput = 1; for (String[] in : wordresults) { expectedNbOutput *= Math.max(in.length, 1); } Assert.assertEquals(expectedNbOutput, expectedOutputRows.size()); Assert.assertTrue(expectedOutputRows.size() >= outputRows.size()); for (OutputRecord outputRecord : outputRows) { boolean found = false; for (OutputRecord expectedRecord : expectedOutputRows) { if (expectedRecord.equals(outputRecord)) { found = true; break; } } Assert.assertTrue("Record not found: " + outputRecord, found); } return nbDuplicateFound; }