Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: source/test/intltest/usettest.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/test/intltest/usettest.h ('k') | source/test/intltest/ustrtest.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ******************************************************************************** 2 ********************************************************************************
3 * Copyright (C) 1999-2014 International Business Machines Corporation and 3 * Copyright (C) 1999-2015 International Business Machines Corporation and
4 * others. All Rights Reserved. 4 * others. All Rights Reserved.
5 ******************************************************************************** 5 ********************************************************************************
6 * Date Name Description 6 * Date Name Description
7 * 10/20/99 alan Creation. 7 * 10/20/99 alan Creation.
8 * 03/22/2000 Madhu Added additional tests 8 * 03/22/2000 Madhu Added additional tests
9 ******************************************************************************** 9 ********************************************************************************
10 */ 10 */
11 11
12 #include <stdio.h> 12 #include <stdio.h>
13 13
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 CASE(14,TestCloseOver); 83 CASE(14,TestCloseOver);
84 CASE(15,TestEscapePattern); 84 CASE(15,TestEscapePattern);
85 CASE(16,TestInvalidCodePoint); 85 CASE(16,TestInvalidCodePoint);
86 CASE(17,TestSymbolTable); 86 CASE(17,TestSymbolTable);
87 CASE(18,TestSurrogate); 87 CASE(18,TestSurrogate);
88 CASE(19,TestPosixClasses); 88 CASE(19,TestPosixClasses);
89 CASE(20,TestIteration); 89 CASE(20,TestIteration);
90 CASE(21,TestFreezable); 90 CASE(21,TestFreezable);
91 CASE(22,TestSpan); 91 CASE(22,TestSpan);
92 CASE(23,TestStringSpan); 92 CASE(23,TestStringSpan);
93 CASE(24,TestUCAUnsafeBackwards);
93 default: name = ""; break; 94 default: name = ""; break;
94 } 95 }
95 } 96 }
96 97
97 static const char NOT[] = "%%%%"; 98 static const char NOT[] = "%%%%";
98 99
99 /** 100 /**
100 * UVector was improperly copying contents 101 * UVector was improperly copying contents
101 * This code will crash this is still true 102 * This code will crash this is still true
102 */ 103 */
(...skipping 1604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 errln("FAIL: UnicodeSet constructor"); 1708 errln("FAIL: UnicodeSet constructor");
1708 continue; 1709 continue;
1709 } 1710 }
1710 expectContainment(set, 1711 expectContainment(set,
1711 CharsToUnicodeString("abc\\U00010000"), 1712 CharsToUnicodeString("abc\\U00010000"),
1712 CharsToUnicodeString("\\uD800;\\uDC00")); // split apa rt surrogate-pair 1713 CharsToUnicodeString("\\uD800;\\uDC00")); // split apa rt surrogate-pair
1713 if (set.size() != 4) { 1714 if (set.size() != 4) {
1714 errln((UnicodeString)"FAIL: " + UnicodeString(DATA[i], -1, US_INV) + ".size() == " + 1715 errln((UnicodeString)"FAIL: " + UnicodeString(DATA[i], -1, US_INV) + ".size() == " +
1715 set.size() + ", expected 4"); 1716 set.size() + ", expected 4");
1716 } 1717 }
1718
1719 {
1720 UErrorCode subErr = U_ZERO_ERROR;
1721 checkRoundTrip(set);
1722 checkSerializeRoundTrip(set, subErr);
1723 }
1717 } 1724 }
1718 } 1725 }
1719 1726
1720 void UnicodeSetTest::TestExhaustive() { 1727 void UnicodeSetTest::TestExhaustive() {
1721 // exhaustive tests. Simulate UnicodeSets with integers. 1728 // exhaustive tests. Simulate UnicodeSets with integers.
1722 // That gives us very solid tests (except for large memory tests). 1729 // That gives us very solid tests (except for large memory tests).
1723 1730
1724 int32_t limit = 128; 1731 int32_t limit = 128;
1725 1732
1726 UnicodeSet x, y, z, aa; 1733 UnicodeSet x, y, z, aa;
1727 1734
1728 for (int32_t i = 0; i < limit; ++i) { 1735 for (int32_t i = 0; i < limit; ++i) {
1729 bitsToSet(i, x); 1736 bitsToSet(i, x);
1730 logln((UnicodeString)"Testing " + i + ", " + x); 1737 logln((UnicodeString)"Testing " + i + ", " + x);
1731 _testComplement(i, x, y); 1738 _testComplement(i, x, y);
1732 1739
1740 UnicodeSet &toTest = bitsToSet(i, aa);
1741
1733 // AS LONG AS WE ARE HERE, check roundtrip 1742 // AS LONG AS WE ARE HERE, check roundtrip
1734 checkRoundTrip(bitsToSet(i, aa)); 1743 checkRoundTrip(toTest);
1744 UErrorCode ec = U_ZERO_ERROR;
1745 checkSerializeRoundTrip(toTest, ec);
1735 1746
1736 for (int32_t j = 0; j < limit; ++j) { 1747 for (int32_t j = 0; j < limit; ++j) {
1737 _testAdd(i,j, x,y,z); 1748 _testAdd(i,j, x,y,z);
1738 _testXor(i,j, x,y,z); 1749 _testXor(i,j, x,y,z);
1739 _testRetain(i,j, x,y,z); 1750 _testRetain(i,j, x,y,z);
1740 _testRemove(i,j, x,y,z); 1751 _testRemove(i,j, x,y,z);
1741 } 1752 }
1742 } 1753 }
1743 } 1754 }
1744 1755
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1883 } 1894 }
1884 return pairs; 1895 return pairs;
1885 } 1896 }
1886 1897
1887 /** 1898 /**
1888 * Basic consistency check for a few items. 1899 * Basic consistency check for a few items.
1889 * That the iterator works, and that we can create a pattern and 1900 * That the iterator works, and that we can create a pattern and
1890 * get the same thing back 1901 * get the same thing back
1891 */ 1902 */
1892 void UnicodeSetTest::checkRoundTrip(const UnicodeSet& s) { 1903 void UnicodeSetTest::checkRoundTrip(const UnicodeSet& s) {
1893 UErrorCode ec = U_ZERO_ERROR; 1904 {
1905 UnicodeSet t(s);
1906 checkEqual(s, t, "copy ct");
1907 }
1894 1908
1895 UnicodeSet t(s); 1909 {
1896 checkEqual(s, t, "copy ct"); 1910 UnicodeSet t(0xabcd, 0xdef0); // dummy contents should be overwritten
1911 t = s;
1912 checkEqual(s, t, "operator=");
1913 }
1897 1914
1898 t = s; 1915 {
1899 checkEqual(s, t, "operator="); 1916 UnicodeSet t;
1917 copyWithIterator(t, s, FALSE);
1918 checkEqual(s, t, "iterator roundtrip");
1919 }
1900 1920
1901 copyWithIterator(t, s, FALSE); 1921 {
1902 checkEqual(s, t, "iterator roundtrip"); 1922 UnicodeSet t;
1923 copyWithIterator(t, s, TRUE); // try range
1924 checkEqual(s, t, "iterator roundtrip");
1925 }
1903 1926
1904 copyWithIterator(t, s, TRUE); // try range 1927 {
1905 checkEqual(s, t, "iterator roundtrip"); 1928 UnicodeSet t;
1906 1929 UnicodeString pat;
1907 UnicodeString pat; s.toPattern(pat, FALSE); 1930 UErrorCode ec = U_ZERO_ERROR;
1908 t.applyPattern(pat, ec); 1931 s.toPattern(pat, FALSE);
1909 if (U_FAILURE(ec)) { 1932 t.applyPattern(pat, ec);
1910 errln("FAIL: applyPattern"); 1933 if (U_FAILURE(ec)) {
1911 return; 1934 errln("FAIL: toPattern(escapeUnprintable=FALSE), applyPattern - %s", u_errorName(ec));
1912 } else { 1935 return;
1913 checkEqual(s, t, "toPattern(false)"); 1936 } else {
1937 checkEqual(s, t, "toPattern(false)");
1938 }
1914 } 1939 }
1915 1940
1916 s.toPattern(pat, TRUE); 1941 {
1917 t.applyPattern(pat, ec); 1942 UnicodeSet t;
1918 if (U_FAILURE(ec)) { 1943 UnicodeString pat;
1919 errln("FAIL: applyPattern"); 1944 UErrorCode ec = U_ZERO_ERROR;
1920 return; 1945 s.toPattern(pat, TRUE);
1921 } else { 1946 t.applyPattern(pat, ec);
1922 checkEqual(s, t, "toPattern(true)"); 1947 if (U_FAILURE(ec)) {
1948 errln("FAIL: toPattern(escapeUnprintable=TRUE), applyPattern - %s", u_errorName(ec));
1949 return;
1950 } else {
1951 checkEqual(s, t, "toPattern(true)");
1952 }
1923 } 1953 }
1924 } 1954 }
1925 1955
1956 void UnicodeSetTest::checkSerializeRoundTrip(const UnicodeSet& t, UErrorCode &st atus) {
1957 if(U_FAILURE(status)) return;
1958 int32_t len = t.serialize(serializeBuffer.getAlias(), serializeBuffer.getCapac ity(), status);
1959 if(status == U_BUFFER_OVERFLOW_ERROR) {
1960 status = U_ZERO_ERROR;
1961 serializeBuffer.resize(len);
1962 len = t.serialize(serializeBuffer.getAlias(), serializeBuffer.getCapacity(), status);
1963 // let 2nd error stand
1964 }
1965 if(U_FAILURE(status)) {
1966 errln("checkSerializeRoundTrip: error %s serializing buffer\n", u_errorName( status));
1967 return;
1968 }
1969 UnicodeSet deserialized(serializeBuffer.getAlias(), len, UnicodeSet::kSerializ ed, status);
1970 if(U_FAILURE(status)) {
1971 errln("checkSerializeRoundTrip: error %s deserializing buffer: buf %p len %d , original %d\n", u_errorName(status), serializeBuffer.getAlias(), len, t.getRan geCount());
1972 return;
1973 }
1974
1975 checkEqual(t, deserialized, "Set was unequal when deserialized");
1976 }
1977
1926 void UnicodeSetTest::copyWithIterator(UnicodeSet& t, const UnicodeSet& s, UBool withRange) { 1978 void UnicodeSetTest::copyWithIterator(UnicodeSet& t, const UnicodeSet& s, UBool withRange) {
1927 t.clear(); 1979 t.clear();
1928 UnicodeSetIterator it(s); 1980 UnicodeSetIterator it(s);
1929 if (withRange) { 1981 if (withRange) {
1930 while (it.nextRange()) { 1982 while (it.nextRange()) {
1931 if (it.isString()) { 1983 if (it.isString()) {
1932 t.add(it.getString()); 1984 t.add(it.getString());
1933 } else { 1985 } else {
1934 t.add(it.getCodepoint(), it.getCodepointEnd()); 1986 t.add(it.getCodepoint(), it.getCodepointEnd());
1935 } 1987 }
1936 } 1988 }
1937 } else { 1989 } else {
1938 while (it.next()) { 1990 while (it.next()) {
1939 if (it.isString()) { 1991 if (it.isString()) {
1940 t.add(it.getString()); 1992 t.add(it.getString());
1941 } else { 1993 } else {
1942 t.add(it.getCodepoint()); 1994 t.add(it.getCodepoint());
1943 } 1995 }
1944 } 1996 }
1945 } 1997 }
1946 } 1998 }
1947 1999
1948 UBool UnicodeSetTest::checkEqual(const UnicodeSet& s, const UnicodeSet& t, const char* message) { 2000 UBool UnicodeSetTest::checkEqual(const UnicodeSet& s, const UnicodeSet& t, const char* message) {
2001 assertEquals(UnicodeString("RangeCount: ","") + message, s.getRangeCount(), t. getRangeCount());
2002 assertEquals(UnicodeString("size: ","") + message, s.size(), t.size());
1949 UnicodeString source; s.toPattern(source, TRUE); 2003 UnicodeString source; s.toPattern(source, TRUE);
1950 UnicodeString result; t.toPattern(result, TRUE); 2004 UnicodeString result; t.toPattern(result, TRUE);
1951 if (s != t) { 2005 if (s != t) {
1952 errln((UnicodeString)"FAIL: " + message 2006 errln((UnicodeString)"FAIL: " + message
1953 + "; source = " + source 2007 + "; source = " + source
1954 + "; result = " + result 2008 + "; result = " + result
1955 ); 2009 );
1956 return FALSE; 2010 return FALSE;
1957 } else { 2011 } else {
1958 logln((UnicodeString)"Ok: " + message 2012 logln((UnicodeString)"Ok: " + message
(...skipping 1846 matching lines...) Expand 10 before | Expand all | Expand 10 after
3805 string16=UNICODE_STRING_SIMPLE("abbcdabcdabd"); 3859 string16=UNICODE_STRING_SIMPLE("abbcdabcdabd");
3806 s16=string16.getBuffer(); 3860 s16=string16.getBuffer();
3807 length16=string16.length(); 3861 length16=string16.length();
3808 if( set.spanBack(s16, 12, USET_SPAN_CONTAINED)!=0 || 3862 if( set.spanBack(s16, 12, USET_SPAN_CONTAINED)!=0 ||
3809 set.spanBack(s16, 12, USET_SPAN_SIMPLE)!=6 || 3863 set.spanBack(s16, 12, USET_SPAN_SIMPLE)!=6 ||
3810 set.spanBack(s16, 5, USET_SPAN_SIMPLE)!=0 3864 set.spanBack(s16, 5, USET_SPAN_SIMPLE)!=0
3811 ) { 3865 ) {
3812 errln("FAIL: UnicodeSet(%s).spanBack(while longest match) returns the wr ong value", pattern); 3866 errln("FAIL: UnicodeSet(%s).spanBack(while longest match) returns the wr ong value", pattern);
3813 } 3867 }
3814 } 3868 }
3869
3870 /**
3871 * Including collationroot.h fails here with
3872 1>c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(142) : error C2008: '$' : unexpected in macro definition
3873 * .. so, we skip this test on Windows.
3874 *
3875 * the cause is that intltest builds with /Za which disables language extension s - which means
3876 * windows header files can't be used.
3877 */
3878 #if !UCONFIG_NO_COLLATION && !U_PLATFORM_HAS_WIN32_API
3879 #include "collationroot.h"
3880 #include "collationtailoring.h"
3881 #endif
3882
3883 void UnicodeSetTest::TestUCAUnsafeBackwards() {
3884 #if U_PLATFORM_HAS_WIN32_API
3885 infoln("Skipping TestUCAUnsafeBackwards() - can't include collationroot.h on Windows without language extensions!");
3886 #elif !UCONFIG_NO_COLLATION
3887 UErrorCode errorCode = U_ZERO_ERROR;
3888
3889 // Get the unsafeBackwardsSet
3890 const CollationCacheEntry *rootEntry = CollationRoot::getRootCacheEntry(erro rCode);
3891 if(U_FAILURE(errorCode)) {
3892 dataerrln("FAIL: %s getting root cache entry", u_errorName(errorCode));
3893 return;
3894 }
3895 //const UVersionInfo &version = rootEntry->tailoring->version;
3896 const UnicodeSet *unsafeBackwardSet = rootEntry->tailoring->unsafeBackwardSe t;
3897
3898 checkSerializeRoundTrip(*unsafeBackwardSet, errorCode);
3899
3900 if(!logKnownIssue("11891","UnicodeSet fails to round trip on CollationRoot.. .unsafeBackwards set")) {
3901 // simple test case
3902 // TODO(ticket #11891): Simplify this test function to this simple case. Rename it appropriately.
3903 // TODO(ticket #11891): Port test to Java. Is this a bug there, too?
3904 UnicodeSet surrogates;
3905 surrogates.add(0xd83a); // a lead surrogate
3906 surrogates.add(0xdc00, 0xdfff); // a range of trail surrogates
3907 UnicodeString pat;
3908 surrogates.toPattern(pat, FALSE); // bad: [ 0xd83a, 0xdc00, 0x2d, 0xdff f ]
3909 // TODO: Probably fix either UnicodeSet::_generatePattern() or _appendTo Pat()
3910 // so that at least one type of surrogate code points are escaped,
3911 // or (minimally) so that adjacent lead+trail surrogate code points are escaped.
3912 errorCode = U_ZERO_ERROR;
3913 UnicodeSet s2;
3914 s2.applyPattern(pat, errorCode); // looks like invalid range [ 0x1e800, 0x2d, 0xdfff ]
3915 if(U_FAILURE(errorCode)) {
3916 errln("FAIL: surrogates to/from pattern - %s", u_errorName(errorCode ));
3917 } else {
3918 checkEqual(surrogates, s2, "surrogates to/from pattern");
3919 }
3920 // This occurs in the UCA unsafe-backwards set.
3921 checkRoundTrip(*unsafeBackwardSet);
3922 }
3923 #endif
3924 }
OLDNEW
« no previous file with comments | « source/test/intltest/usettest.h ('k') | source/test/intltest/ustrtest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698