From: Andy Heninger Date: Tue, 5 Dec 2017 18:45:53 +0000 (+0000) Subject: ICU-13388 remove unused code in break iterator tests. X-Git-Tag: release-61-rc~173 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a542da3294b6746f660cf8d1095e8875c4f2d2d;p=icu ICU-13388 remove unused code in break iterator tests. X-SVN-Rev: 40697 --- diff --git a/icu4c/source/test/intltest/rbbitst.cpp b/icu4c/source/test/intltest/rbbitst.cpp index 25038627932..1d9091e5dc0 100644 --- a/icu4c/source/test/intltest/rbbitst.cpp +++ b/icu4c/source/test/intltest/rbbitst.cpp @@ -75,7 +75,6 @@ void RBBITest::runIndexedTest( int32_t index, UBool exec, const char* &name, cha #endif #if !UCONFIG_NO_FILE_IO TESTCASE_AUTO(TestUnicodeFiles); - TESTCASE_AUTO(TestEmptyString); #endif TESTCASE_AUTO(TestGetAvailableLocales); TESTCASE_AUTO(TestGetDisplayName); @@ -110,147 +109,6 @@ void RBBITest::runIndexedTest( int32_t index, UBool exec, const char* &name, cha } -//--------------------------------------------------------------------------- -// -// class BITestData Holds a set of Break iterator test data and results -// Includes -// - the string data to be broken -// - a vector of the expected break positions. -// - a vector of source line numbers for the data, -// (to help see where errors occured.) -// - The expected break tag values. -// - Vectors of actual break positions and tag values. -// - Functions for comparing actual with expected and -// reporting errors. -// -//---------------------------------------------------------------------------- -class BITestData { -public: - UnicodeString fDataToBreak; - UVector fExpectedBreakPositions; - UVector fExpectedTags; - UVector fLineNum; - UVector fActualBreakPositions; // Test Results. - UVector fActualTags; - - BITestData(UErrorCode &status); - void addDataChunk(const char *data, int32_t tag, int32_t lineNum, UErrorCode status); - void checkResults(const char *heading, RBBITest *test); - void err(const char *heading, RBBITest *test, int32_t expectedIdx, int32_t actualIdx); - void clearResults(); -}; - -// -// Constructor. -// -BITestData::BITestData(UErrorCode &status) -: fExpectedBreakPositions(status), fExpectedTags(status), fLineNum(status), fActualBreakPositions(status), - fActualTags(status) -{ -} - -// -// addDataChunk. Add a section (non-breaking) piece if data to the test data. -// The macro form collects the line number, which is helpful -// when tracking down failures. -// -// A null data item is inserted at the start of each test's data -// to put the starting zero into the data list. The position saved for -// each non-null item is its ending position. -// -#define ADD_DATACHUNK(td, data, tag, status) td.addDataChunk(data, tag, __LINE__, status); -void BITestData::addDataChunk(const char *data, int32_t tag, int32_t lineNum, UErrorCode status) { - if (U_FAILURE(status)) {return;} - if (data != NULL) { - fDataToBreak.append(CharsToUnicodeString(data)); - } - fExpectedBreakPositions.addElement(fDataToBreak.length(), status); - fExpectedTags.addElement(tag, status); - fLineNum.addElement(lineNum, status); -} - - -// -// checkResults. Compare the actual and expected break positions, report any differences. -// -void BITestData::checkResults(const char *heading, RBBITest *test) { - int32_t expectedIndex = 0; - int32_t actualIndex = 0; - - for (;;) { - // If we've run through both the expected and actual results vectors, we're done. - // break out of the loop. - if (expectedIndex >= fExpectedBreakPositions.size() && - actualIndex >= fActualBreakPositions.size()) { - break; - } - - - if (expectedIndex >= fExpectedBreakPositions.size()) { - err(heading, test, expectedIndex-1, actualIndex); - actualIndex++; - continue; - } - - if (actualIndex >= fActualBreakPositions.size()) { - err(heading, test, expectedIndex, actualIndex-1); - expectedIndex++; - continue; - } - - if (fActualBreakPositions.elementAti(actualIndex) != fExpectedBreakPositions.elementAti(expectedIndex)) { - err(heading, test, expectedIndex, actualIndex); - // Try to resync the positions of the indices, to avoid a rash of spurious erros. - if (fActualBreakPositions.elementAti(actualIndex) < fExpectedBreakPositions.elementAti(expectedIndex)) { - actualIndex++; - } else { - expectedIndex++; - } - continue; - } - - if (fActualTags.elementAti(actualIndex) != fExpectedTags.elementAti(expectedIndex)) { - test->errln("%s, tag mismatch. Test Line = %d, expected tag=%d, got %d", - heading, fLineNum.elementAt(expectedIndex), - fExpectedTags.elementAti(expectedIndex), fActualTags.elementAti(actualIndex)); - } - - actualIndex++; - expectedIndex++; - } -} - -// -// err - An error was found. Report it, along with information about where the -// incorrectly broken test data appeared in the source file. -// -void BITestData::err(const char *heading, RBBITest *test, int32_t expectedIdx, int32_t actualIdx) -{ - int32_t expected = fExpectedBreakPositions.elementAti(expectedIdx); - int32_t actual = fActualBreakPositions.elementAti(actualIdx); - int32_t o = 0; - int32_t line = fLineNum.elementAti(expectedIdx); - if (expectedIdx > 0) { - // The line numbers are off by one because a premature break occurs somewhere - // within the previous item, rather than at the start of the current (expected) item. - // We want to report the offset of the unexpected break from the start of - // this previous item. - o = actual - fExpectedBreakPositions.elementAti(expectedIdx-1); - } - if (actual < expected) { - test->errln("%s unexpected break at offset %d in test item from line %d. actual break: %d expected break: %d", heading, o, line, actual, expected); - } else { - test->errln("%s Failed to find break at end of item from line %d. actual break: %d expected break: %d", heading, line, actual, expected); - } -} - - -void BITestData::clearResults() { - fActualBreakPositions.removeAllElements(); - fActualTags.removeAllElements(); -} - - //-------------------------------------------------------------------------------------- // // RBBITest constructor and destructor @@ -345,277 +203,12 @@ void RBBITest::TestBug3818() { delete bi; } -//---------------------------------------------------------------------------- -// -// generalIteratorTest Given a break iterator and a set of test data, -// Run the tests and report the results. -// -//---------------------------------------------------------------------------- -void RBBITest::generalIteratorTest(RuleBasedBreakIterator& bi, BITestData &td) -{ - - bi.setText(td.fDataToBreak); - - testFirstAndNext(bi, td); - - testLastAndPrevious(bi, td); - - testFollowing(bi, td); - testPreceding(bi, td); - testIsBoundary(bi, td); - doMultipleSelectionTest(bi, td); -} - - -// -// testFirstAndNext. Run the iterator forwards in the obvious first(), next() -// kind of loop. -// -void RBBITest::testFirstAndNext(RuleBasedBreakIterator& bi, BITestData &td) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t lastP = -1; - int32_t tag; - - logln("Test first and next"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - for (p=bi.first(); p!=RuleBasedBreakIterator::DONE; p=bi.next()) { - td.fActualBreakPositions.addElement(p, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - if (p <= lastP) { - // If the iterator is not making forward progress, stop. - // No need to raise an error here, it'll be detected in the normal check of results. - break; - } - lastP = p; - } - td.checkResults("testFirstAndNext", this); -} - - -// -// TestLastAndPrevious. Run the iterator backwards, starting with last(). -// -void RBBITest::testLastAndPrevious(RuleBasedBreakIterator& bi, BITestData &td) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t lastP = 0x7ffffffe; - int32_t tag; - - logln("Test last and previous"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - for (p=bi.last(); p!=RuleBasedBreakIterator::DONE; p=bi.previous()) { - // Save break position. Insert it at start of vector of results, shoving - // already-saved results further towards the end. - td.fActualBreakPositions.insertElementAt(p, 0, status); - // bi.previous(); // TODO: Why does this fix things up???? - // bi.next(); - tag = bi.getRuleStatus(); - td.fActualTags.insertElementAt(tag, 0, status); - if (p >= lastP) { - // If the iterator is not making progress, stop. - // No need to raise an error here, it'll be detected in the normal check of results. - break; - } - lastP = p; - } - td.checkResults("testLastAndPrevious", this); -} - - -void RBBITest::testFollowing(RuleBasedBreakIterator& bi, BITestData &td) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t tag; - int32_t lastP = -2; // A value that will never be returned as a break position. - // cannot be -1; that is returned for DONE. - int i; - - logln("testFollowing():"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - // Save the starting point, since we won't get that out of following. - p = bi.first(); - td.fActualBreakPositions.addElement(p, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - - for (i = 0; i <= td.fDataToBreak.length()+1; i++) { - p = bi.following(i); - if (p != lastP) { - if (p == RuleBasedBreakIterator::DONE) { - break; - } - // We've reached a new break position. Save it. - td.fActualBreakPositions.addElement(p, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - lastP = p; - } - } - // The loop normally exits by means of the break in the middle. - // Make sure that the index was at the correct position for the break iterator to have - // returned DONE. - if (i != td.fDataToBreak.length()) { - errln("testFollowing(): iterator returned DONE prematurely."); - } - - // Full check of all results. - td.checkResults("testFollowing", this); -} - - - -void RBBITest::testPreceding(RuleBasedBreakIterator& bi, BITestData &td) { - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t tag; - int32_t lastP = 0x7ffffffe; - int i; - - logln("testPreceding():"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - p = bi.last(); - td.fActualBreakPositions.addElement(p, status); - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - - for (i = td.fDataToBreak.length(); i>=-1; i--) { - p = bi.preceding(i); - if (p != lastP) { - if (p == RuleBasedBreakIterator::DONE) { - break; - } - // We've reached a new break position. Save it. - td.fActualBreakPositions.insertElementAt(p, 0, status); - lastP = p; - tag = bi.getRuleStatus(); - td.fActualTags.insertElementAt(tag, 0, status); - } - } - // The loop normally exits by means of the break in the middle. - // Make sure that the index was at the correct position for the break iterator to have - // returned DONE. - if (i != 0) { - errln("testPreceding(): iterator returned DONE prematurely."); - } - - // Full check of all results. - td.checkResults("testPreceding", this); -} - - - -void RBBITest::testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td) { - UErrorCode status = U_ZERO_ERROR; - int i; - int32_t tag; - - logln("testIsBoundary():"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - for (i = 0; i <= td.fDataToBreak.length(); i++) { - if (bi.isBoundary(i)) { - td.fActualBreakPositions.addElement(i, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - } - } - td.checkResults("testIsBoundary: ", this); -} - - - -void RBBITest::doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td) -{ - iterator.setText(td.fDataToBreak); - - RuleBasedBreakIterator* testIterator =(RuleBasedBreakIterator*)iterator.clone(); - int32_t offset = iterator.first(); - int32_t testOffset; - int32_t count = 0; - - logln("doMultipleSelectionTest text of length: %d", td.fDataToBreak.length()); - - if (*testIterator != iterator) - errln("clone() or operator!= failed: two clones compared unequal"); - - do { - testOffset = testIterator->first(); - testOffset = testIterator->next(count); - if (offset != testOffset) - errln(UnicodeString("next(n) and next() not returning consistent results: for step ") + count + ", next(n) returned " + testOffset + " and next() had " + offset); - - if (offset != RuleBasedBreakIterator::DONE) { - count++; - offset = iterator.next(); - - if (offset != RuleBasedBreakIterator::DONE && *testIterator == iterator) { - errln("operator== failed: Two unequal iterators compared equal. count=%d offset=%d", count, offset); - if (count > 10000 || offset == -1) { - errln("operator== failed too many times. Stopping test."); - if (offset == -1) { - errln("Does (RuleBasedBreakIterator::DONE == -1)?"); - } - return; - } - } - } - } while (offset != RuleBasedBreakIterator::DONE); - - // now do it backwards... - offset = iterator.last(); - count = 0; - - do { - testOffset = testIterator->last(); - testOffset = testIterator->next(count); // next() with a negative arg is same as previous - if (offset != testOffset) - errln(UnicodeString("next(n) and next() not returning consistent results: for step ") + count + ", next(n) returned " + testOffset + " and next() had " + offset); - - if (offset != RuleBasedBreakIterator::DONE) { - count--; - offset = iterator.previous(); - } - } while (offset != RuleBasedBreakIterator::DONE); - - delete testIterator; -} - //--------------------------------------------- // // other tests // //--------------------------------------------- -void RBBITest::TestEmptyString() -{ - UnicodeString text = ""; - UErrorCode status = U_ZERO_ERROR; - - BITestData x(status); - ADD_DATACHUNK(x, "", 0, status); // Break at start of data - RuleBasedBreakIterator* bi = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errcheckln(status, "Failed to create the BreakIterator for default locale in TestEmptyString. - %s", u_errorName(status)); - return; - } - generalIteratorTest(*bi, x); - delete bi; -} void RBBITest::TestGetAvailableLocales() { diff --git a/icu4c/source/test/intltest/rbbitst.h b/icu4c/source/test/intltest/rbbitst.h index ba3c5b94cd2..597025c28e3 100644 --- a/icu4c/source/test/intltest/rbbitst.h +++ b/icu4c/source/test/intltest/rbbitst.h @@ -41,7 +41,6 @@ public: void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); - void TestEmptyString(); void TestGetAvailableLocales(); void TestGetDisplayName(); void TestEndBehaviour(); @@ -85,40 +84,6 @@ private: * internal methods to prepare test data **/ - /** - * Perform tests of BreakIterator forward and backward functionality - * on different kinds of iterators (word, sentence, line and character). - * It tests the methods first(), next(), current(), preceding(), following() - * previous() and isBoundary(). - * It makes use of internal functions to achieve this. - **/ - void generalIteratorTest(RuleBasedBreakIterator& bi, BITestData &td); - /** - * Internal method to perform iteration and test the first() and next() functions - **/ - void testFirstAndNext(RuleBasedBreakIterator& bi, BITestData &td); - /** - * Internal method to perform iteration and test the last() and previous() functions - **/ - void testLastAndPrevious(RuleBasedBreakIterator& bi, BITestData &td); - /** - * Internal method to perform iteration and test the following() function - **/ - void testFollowing(RuleBasedBreakIterator& bi, BITestData &td); - /** - * Internal method to perform iteration and test the preceding() function - **/ - void testPreceding(RuleBasedBreakIterator& bi, BITestData &td); - /** - * Internal method to perform iteration and test the isBoundary() function - **/ - void testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td); - /** - * Internal method to perform tests of BreakIterator multiple selection functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td); - void RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t seed, int32_t loopCount, UBool useUText); diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/BreakIteratorTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/BreakIteratorTest.java index 37319a17383..bd29e7c6f31 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/BreakIteratorTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/rbbi/BreakIteratorTest.java @@ -9,11 +9,8 @@ package com.ibm.icu.dev.test.rbbi; import java.text.StringCharacterIterator; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -23,190 +20,19 @@ import com.ibm.icu.text.BreakIterator; import com.ibm.icu.text.FilteredBreakIteratorBuilder; import com.ibm.icu.util.ULocale; -@SuppressWarnings("unused") @RunWith(JUnit4.class) public class BreakIteratorTest extends TestFmwk { - private BreakIterator characterBreak; - private BreakIterator wordBreak; - private BreakIterator lineBreak; - private BreakIterator sentenceBreak; - private BreakIterator titleBreak; - public BreakIteratorTest() { } - @Before - public void init(){ - characterBreak = BreakIterator.getCharacterInstance(); - wordBreak = BreakIterator.getWordInstance(); - lineBreak = BreakIterator.getLineInstance(); - //logln("Creating sentence iterator..."); - sentenceBreak = BreakIterator.getSentenceInstance(); - //logln("Finished creating sentence iterator..."); - titleBreak = BreakIterator.getTitleInstance(); - } + //========================================================================= // general test subroutines //========================================================================= - private List _testFirstAndNext(BreakIterator bi, String text) { - int p = bi.first(); - int lastP = p; - List result = new ArrayList(); - - if (p != 0) - errln("first() returned " + p + " instead of 0"); - while (p != BreakIterator.DONE) { - p = bi.next(); - if (p != BreakIterator.DONE) { - if (p <= lastP) - errln("next() failed to move forward: next() on position " - + lastP + " yielded " + p); - - result.add(text.substring(lastP, p)); - } - else { - if (lastP != text.length()) - errln("next() returned DONE prematurely: offset was " - + lastP + " instead of " + text.length()); - } - lastP = p; - } - return result; - } - - private List _testLastAndPrevious(BreakIterator bi, String text) { - int p = bi.last(); - int lastP = p; - List result = new ArrayList(); - - if (p != text.length()) - errln("last() returned " + p + " instead of " + text.length()); - while (p != BreakIterator.DONE) { - p = bi.previous(); - if (p != BreakIterator.DONE) { - if (p >= lastP) - errln("previous() failed to move backward: previous() on position " - + lastP + " yielded " + p); - - result.add(0, text.substring(p, lastP)); - } - else { - if (lastP != 0) - errln("previous() returned DONE prematurely: offset was " - + lastP + " instead of 0"); - } - lastP = p; - } - return result; - } - - private void compareFragmentLists(String f1Name, String f2Name, List f1, List f2) { - int p1 = 0; - int p2 = 0; - String s1; - String s2; - int t1 = 0; - int t2 = 0; - - while (p1 < f1.size() && p2 < f2.size()) { - s1 = f1.get(p1); - s2 = f2.get(p2); - t1 += s1.length(); - t2 += s2.length(); - - if (s1.equals(s2)) { - debugLogln(" >" + s1 + "<"); - ++p1; - ++p2; - } - else { - int tempT1 = t1; - int tempT2 = t2; - int tempP1 = p1; - int tempP2 = p2; - - while (tempT1 != tempT2 && tempP1 < f1.size() && tempP2 < f2.size()) { - while (tempT1 < tempT2 && tempP1 < f1.size()) { - tempT1 += (f1.get(tempP1)).length(); - ++tempP1; - } - while (tempT2 < tempT1 && tempP2 < f2.size()) { - tempT2 += (f2.get(tempP2)).length(); - ++tempP2; - } - } - logln("*** " + f1Name + " has:"); - while (p1 <= tempP1 && p1 < f1.size()) { - s1 = f1.get(p1); - t1 += s1.length(); - debugLogln(" *** >" + s1 + "<"); - ++p1; - } - logln("***** " + f2Name + " has:"); - while (p2 <= tempP2 && p2 < f2.size()) { - s2 = f2.get(p2); - t2 += s2.length(); - debugLogln(" ***** >" + s2 + "<"); - ++p2; - } - errln("Discrepancy between " + f1Name + " and " + f2Name); - } - } - } - - private void _testFollowing(BreakIterator bi, String text, int[] boundaries) { - logln("testFollowing():"); - int p = 2; - for (int i = 0; i <= text.length(); i++) { - if (i == boundaries[p]) - ++p; - - int b = bi.following(i); - logln("bi.following(" + i + ") -> " + b); - if (b != boundaries[p]) - errln("Wrong result from following() for " + i + ": expected " + boundaries[p] - + ", got " + b); - } - } - - private void _testPreceding(BreakIterator bi, String text, int[] boundaries) { - logln("testPreceding():"); - int p = 0; - for (int i = 0; i <= text.length(); i++) { - int b = bi.preceding(i); - logln("bi.preceding(" + i + ") -> " + b); - if (b != boundaries[p]) - errln("Wrong result from preceding() for " + i + ": expected " + boundaries[p] - + ", got " + b); - - if (i == boundaries[p + 1]) - ++p; - } - } - - private void _testIsBoundary(BreakIterator bi, String text, int[] boundaries) { - logln("testIsBoundary():"); - int p = 1; - boolean isB; - for (int i = 0; i <= text.length(); i++) { - isB = bi.isBoundary(i); - logln("bi.isBoundary(" + i + ") -> " + isB); - - if (i == boundaries[p]) { - if (!isB) - errln("Wrong result from isBoundary() for " + i + ": expected true, got false"); - ++p; - } - else { - if (isB) - errln("Wrong result from isBoundary() for " + i + ": expected false, got true"); - } - } - } private void doOtherInvariantTest(BreakIterator tb, String testChars) { @@ -362,43 +188,7 @@ public class BreakIteratorTest extends TestFmwk errln("Didn't get break at end of string."); } - // The Following two tests are ported from ICU4C 1.8.1 [Richard/GCL] - /** - * Port From: ICU4C v1.8.1 : textbounds : IntlTestTextBoundary - * Source File: $ICU4CRoot/source/test/intltest/ittxtbd.cpp - **/ - /** - * test methods preceding, following and isBoundary - **/ - @Test - public void TestPreceding() { - String words3 = "aaa bbb ccc"; - BreakIterator e = BreakIterator.getWordInstance(Locale.getDefault()); - e.setText( words3 ); - e.first(); - int p1 = e.next(); - int p2 = e.next(); - int p3 = e.next(); - int p4 = e.next(); - - int f = e.following(p2+1); - int p = e.preceding(p2+1); - if (f!=p3) - errln("IntlTestTextBoundary::TestPreceding: f!=p3"); - if (p!=p2) - errln("IntlTestTextBoundary::TestPreceding: p!=p2"); - - if (p1+1!=p2) - errln("IntlTestTextBoundary::TestPreceding: p1+1!=p2"); - - if (p3+1!=p4) - errln("IntlTestTextBoundary::TestPreceding: p3+1!=p4"); - - if (!e.isBoundary(p2) || e.isBoundary(p2+1) || !e.isBoundary(p3)) - { - errln("IntlTestTextBoundary::TestPreceding: isBoundary err"); - } - } + // The Following test is ported from ICU4C 1.8.1 [Richard/GCL] /** * Ticket#5615