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

Unified Diff: icu46/source/test/intltest/rndmcoll.cpp

Issue 5516007: Check in the pristine copy of ICU 4.6... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: Created 10 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « icu46/source/test/intltest/rndmcoll.h ('k') | icu46/source/test/intltest/sdtfmtts.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: icu46/source/test/intltest/rndmcoll.cpp
===================================================================
--- icu46/source/test/intltest/rndmcoll.cpp (revision 0)
+++ icu46/source/test/intltest/rndmcoll.cpp (revision 0)
@@ -0,0 +1,176 @@
+/*
+ ******************************************************************************
+ * Copyright (C) 2005-2007, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ ******************************************************************************
+ */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include "rndmcoll.h"
+#include "wbnf.h"
+
+
+#if !UCONFIG_NO_COLLATION
+
+//Raymond: Following comments are copied from Java implementation
+//
+// each rule can be:
+// "[" command "]"
+// "& [" position "]"
+// "&" before chars
+// relation "[variable top]"
+// relation (chars "|")? chars ("/" chars)?
+// plus, a reset must come before a relation
+
+
+static const char collationBNF[] =
+ "$s = ' '? 50%;"
+ "$crlf = '\r\n';"
+
+ "$alternateOptions = non'-'ignorable | shifted;"
+ "$onoff = on | off;"
+ "$caseFirstOptions = off | upper | lower;"
+ "$strengthOptions = '1' | '2' | '3' | '4' | 'I';"
+ "$commandList = '['"
+ " ( alternate ' ' $alternateOptions"
+ " | backwards' 2'"
+ " | normalization ' ' $onoff "
+ " | caseLevel ' ' $onoff "
+ " | hiraganaQ ' ' $onoff"
+ " | caseFirst ' ' $caseFirstOptions"
+ " | strength ' ' $strengthOptions"
+ " ) ']';"
+ "$command = $commandList $crlf;"
+
+ "$ignorableTypes = (tertiary | secondary | primary) ' ' ignorable;"
+ "$allTypes = variable | regular | implicit | trailing | $ignorableTypes;"
+ "$positionList = '[' (first | last) ' ' $allTypes ']';"
+
+ "$beforeList = '[before ' ('1' | '2' | '3') ']';"
+
+ "$relationList = ("
+ " '<'"
+ " | '<<'"
+ " | ';'"
+ " | '<<<'"
+ " | ','"
+ " | '='"
+ ");"
+ "$string = $chars{1,5}~@;"
+ "$chars = a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| '<'| '&'| '['| ']';"
+ "$rel1 = '[variable top]' $s;"
+ "$p1 = ($string $s '|' $s)? 25%;"
+ "$p2 = ('/' $s $string $s)? 25%;"
+ "$rel2 = $p1 $string $s $p2;"
+ "$relation = $relationList $s ($rel1 | $rel2) $crlf;"
+
+ "$reset = '&' $s ($beforeList $s)? 10% ($positionList 1% | $string 10%) $crlf;"
+ "$mostRules = $command 1% | $reset 5% | $relation 25%;"
+ "$root = $command{0,5} $reset $mostRules{1,20};";
+
+
+void RandomCollatorTest::Test2(){
+ // See ticket 5747 about reenabling this test.
+ errln("TestWbnf is incorrectly implemented.\nThis test should be modeled to use the existing test frame work for naming tests.\n");
+ TestWbnf();
+}
+
+
+void RandomCollatorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* ){
+ if (exec) logln("TestSuite RandomCollatorTest: ");
+ switch (index) {
+ TESTCASE(0, Test);
+ TESTCASE(1, Test2);
+ default: name = ""; break;
+ }
+}
+
+/*
+class TestColltorCompare{
+public:
+ UBool operator()(Collator &coll, int count = 1000){
+ UnicodeString a(test_string.get_a_string());
+ UnicodeString b(test_string.get_a_string());
+ UnicodeString c(test_string.get_a_string());
+ do{
+ if (check_transitivity(coll, a, b, c)){
+ a = b;
+ b = c;
+ c = UnicodeString(test_string.get_a_string());
+ }
+ }while(count-- >= 0 );
+
+ return FALSE;
+ }
+ TestColltorCompare():test_string("$s = $c{1,8};", "$s", "$c", new Magic_SelectOneChar("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]&<")){
+ }
+private:
+ UBool check_transitivity(const Collator & coll, const UnicodeString &a, const UnicodeString &b, const UnicodeString &c){
+ int ab = coll.compare(a,b), ba = coll.compare(b,a);
+ int bc = coll.compare(b,c), cb = coll.compare(c,b);
+ int ca = coll.compare(c,a), ac = coll.compare(a,c);
+ // a
+ // / \
+ // b - c
+ //
+ if (//counter-clockwise, maximum
+ (ab >=0 && bc >=0 && ac <0)
+ ||(bc >=0 && ca >=0 && ba <0)
+ ||(ca >=0 && ab >=0 && cb <0)
+
+ //counter-clockwise, minimum
+ ||(ab <=0 && bc <=0 && ca >0)
+ ||(bc <=0 && ca <=0 && ba >0)
+ ||(ca <=0 && ab <=0 && cb >0)
+ ){
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ LanguageGenerator test_string;
+};*/
+
+void RandomCollatorTest::Test(){
+ // See ticket 5747 about reenabling this test.
+ errln("This test needs to be fixed.\n");
+
+ LanguageGenerator test_rule;
+ if (test_rule.parseBNF(collationBNF, "$root", TRUE) != LanguageGenerator::OK){
+ errln("The test code itself is wrong.");
+ return;
+ };
+
+ //TestColltorCompare coll_test;
+
+ static const int CONSTRUCT_RANDOM_COUNT = 1000;
+ int i;
+ for (i=0; i < CONSTRUCT_RANDOM_COUNT; i++){
+ const char * rule = test_rule.next();
+ logln("\n-----------------------------------%d\n",i);
+ logln(UnicodeString(rule, strlen(rule)));
+
+ UnicodeString newRule(rule); // potential bug
+ UErrorCode status = U_ZERO_ERROR;
+ logln( "===========================================\n");
+ fwrite(rule, strlen(rule),1,stdout);
+ logln("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
+
+ Collator * c = new RuleBasedCollator(newRule,status);
+
+ if (U_FAILURE(status)) {
+ errln( "Could not create Collator for the %d(th) generated rule.\n"
+ "Error Name: %s\n"
+ "The rule is ",
+ i, u_errorName(status));
+ return;
+ }
+
+ delete c;
+ }
+}
+
+#endif /* #if !UCONFIG_NO_COLLATION */
+
Property changes on: icu46/source/test/intltest/rndmcoll.cpp
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « icu46/source/test/intltest/rndmcoll.h ('k') | icu46/source/test/intltest/sdtfmtts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698