void G7CollationTest::TestDemo2(/* char* par */) { logln("Demo Test 2 : Create a new table collation with rules \"& C < ch , cH, Ch, CH\""); UErrorCode status = U_ZERO_ERROR; Collator *col = Collator::createInstance("en_US", status); if(U_FAILURE(status)) { delete col; errln("Couldn't instantiate collator. Error: %s", u_errorName(status)); return; } const UnicodeString baseRules = ((RuleBasedCollator*)col)->getRules(); UnicodeString newRules("& C < ch , cH, Ch, CH"); newRules.insert(0, baseRules); RuleBasedCollator *myCollation = new RuleBasedCollator(newRules, status); if (U_FAILURE(status)) { errln("Demo Test 2 Table Collation object creation failed."); return; } int32_t j, n; for (j = 0; j < TOTALTESTSET; j++) { for (n = j+1; n < TOTALTESTSET; n++) { doTest(myCollation, testCases[results[9][j]], testCases[results[9][n]], Collator::LESS); } } delete myCollation; delete col; }
MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { QHBoxLayout* layoutH=new QHBoxLayout; QVBoxLayout* layoutV=new QVBoxLayout; MyField* field = new MyField; field->setMinimumSize(500,500); layoutH->addWidget(field); layoutH->addLayout(layoutV); dl = new QColorDialog(); QLabel* lbl1=new QLabel("Set universe size"); lbl1->setFixedHeight(10); layoutV->addWidget(lbl1); spinBox1 = new QSpinBox; spinBox1->setFixedSize(90,30); spinBox1->setValue(50); spinBox1->setMaximum(50); spinBox1->setMinimum(5); layoutV->addWidget(spinBox1); QObject::connect(spinBox1,SIGNAL(valueChanged(int)),field,SLOT(changeUniverseSize(int))); QLabel* lbl2=new QLabel("Set interval size"); lbl2->setFixedHeight(10); layoutV->addWidget(lbl2); spinBox2 = new QSpinBox; spinBox2->setFixedSize(90,30); spinBox2->setValue(50); spinBox2->setMaximum(1000); spinBox2->setMinimum(10); layoutV->addWidget(spinBox2); QObject::connect(spinBox2,SIGNAL(valueChanged(int)),field,SLOT(changeInterval(int))); btnStart = new QPushButton("Start"); btnStart->setFixedSize(90,30); QObject::connect(btnStart,SIGNAL(clicked()),field,SLOT(startGame())); layoutV->addWidget(btnStart); btnStop = new QPushButton("Stop"); btnStop->setFixedSize(90,30); QObject::connect(btnStop,SIGNAL(clicked()),field,SLOT(stopGame())); layoutV->addWidget(btnStop); btnClear = new QPushButton("Clear"); btnClear->setFixedSize(90,30); QObject::connect(btnClear,SIGNAL(clicked()),field,SLOT(clearUniverse())); layoutV->addWidget(btnClear); setColor = new QPushButton("Set color"); setColor->setFixedSize(90,30); QObject::connect( setColor,SIGNAL(clicked()),this,SLOT(setCellColor())); QObject::connect(dl,SIGNAL(colorSelected(QColor)),field,SLOT(changeColor(QColor))); layoutV->addWidget( setColor); btnNewRules=new QPushButton("New Rules"); btnNewRules->setFixedSize(90,30); QObject::connect(btnNewRules,SIGNAL(clicked()),field,SLOT(newRules())); layoutV->addWidget(btnNewRules); ResetRules=new QPushButton("Reset Rules"); ResetRules->setFixedSize(90,30); QObject::connect(ResetRules,SIGNAL(clicked()),field,SLOT(resetRules())); layoutV->addWidget(ResetRules); this->setLayout(layoutH); }
/** * Test various generic API methods of PluralRules for API coverage. */ void PluralRulesTest::testAPI(/*char *par*/) { UnicodeString pluralTestData[PLURAL_TEST_NUM] = { UNICODE_STRING_SIMPLE("a: n is 1"), UNICODE_STRING_SIMPLE("a: n mod 10 is 2"), UNICODE_STRING_SIMPLE("a: n is not 1"), UNICODE_STRING_SIMPLE("a: n mod 3 is not 1"), UNICODE_STRING_SIMPLE("a: n in 2..5"), UNICODE_STRING_SIMPLE("a: n within 2..5"), UNICODE_STRING_SIMPLE("a: n not in 2..5"), UNICODE_STRING_SIMPLE("a: n not within 2..5"), UNICODE_STRING_SIMPLE("a: n mod 10 in 2..5"), UNICODE_STRING_SIMPLE("a: n mod 10 within 2..5"), UNICODE_STRING_SIMPLE("a: n mod 10 is 2 and n is not 12"), UNICODE_STRING_SIMPLE("a: n mod 10 in 2..3 or n mod 10 is 5"), UNICODE_STRING_SIMPLE("a: n mod 10 within 2..3 or n mod 10 is 5"), UNICODE_STRING_SIMPLE("a: n is 1 or n is 4 or n is 23"), UNICODE_STRING_SIMPLE("a: n mod 2 is 1 and n is not 3 and n in 1..11"), UNICODE_STRING_SIMPLE("a: n mod 2 is 1 and n is not 3 and n within 1..11"), UNICODE_STRING_SIMPLE("a: n mod 2 is 1 or n mod 5 is 1 and n is not 6"), "", }; static const int32_t pluralTestResult[PLURAL_TEST_NUM][30] = { {1, 0}, {2,12,22, 0}, {0,2,3,4,5,0}, {0,2,3,5,6,8,9,0}, {2,3,4,5,0}, {2,3,4,5,0}, {0,1,6,7,8, 0}, {0,1,6,7,8, 0}, {2,3,4,5,12,13,14,15,22,23,24,25,0}, {2,3,4,5,12,13,14,15,22,23,24,25,0}, {2,22,32,42,0}, {2,3,5,12,13,15,22,23,25,0}, {2,3,5,12,13,15,22,23,25,0}, {1,4,23,0}, {1,5,7,9,11,0}, {1,5,7,9,11,0}, {1,3,5,7,9,11,13,15,16,0}, }; UErrorCode status = U_ZERO_ERROR; // ======= Test constructors logln("Testing PluralRules constructors"); logln("\n start default locale test case ..\n"); PluralRules defRule(status); LocalPointer<PluralRules> test(new PluralRules(status)); LocalPointer<PluralRules> newEnPlural(test->forLocale(Locale::getEnglish(), status)); if(U_FAILURE(status)) { dataerrln("ERROR: Could not create PluralRules (default) - exitting"); return; } // ======= Test clone, assignment operator && == operator. LocalPointer<PluralRules> dupRule(defRule.clone()); if (dupRule==NULL) { errln("ERROR: clone plural rules test failed!"); return; } else { if ( *dupRule != defRule ) { errln("ERROR: clone plural rules test failed!"); } } *dupRule = *newEnPlural; if (dupRule!=NULL) { if ( *dupRule != *newEnPlural ) { errln("ERROR: clone plural rules test failed!"); } } // ======= Test empty plural rules logln("Testing Simple PluralRules"); LocalPointer<PluralRules> empRule(test->createRules(UNICODE_STRING_SIMPLE("a:n"), status)); UnicodeString key; for (int32_t i=0; i<10; ++i) { key = empRule->select(i); if ( key.charAt(0)!= 0x61 ) { // 'a' errln("ERROR: empty plural rules test failed! - exitting"); } } // ======= Test simple plural rules logln("Testing Simple PluralRules"); char result[100]; int32_t max; for (int32_t i=0; i<PLURAL_TEST_NUM-1; ++i) { LocalPointer<PluralRules> newRules(test->createRules(pluralTestData[i], status)); setupResult(pluralTestResult[i], result, &max); if ( !checkEqual(*newRules, result, max) ) { errln("ERROR: simple plural rules failed! - exitting"); return; } } // ======= Test complex plural rules logln("Testing Complex PluralRules"); // TODO: the complex test data is hard coded. It's better to implement // a parser to parse the test data. UnicodeString complexRule = UNICODE_STRING_SIMPLE("a: n in 2..5; b: n in 5..8; c: n mod 2 is 1"); UnicodeString complexRule2 = UNICODE_STRING_SIMPLE("a: n within 2..5; b: n within 5..8; c: n mod 2 is 1"); char cRuleResult[] = { 0x6F, // 'o' 0x63, // 'c' 0x61, // 'a' 0x61, // 'a' 0x61, // 'a' 0x61, // 'a' 0x62, // 'b' 0x62, // 'b' 0x62, // 'b' 0x63, // 'c' 0x6F, // 'o' 0x63 // 'c' }; LocalPointer<PluralRules> newRules(test->createRules(complexRule, status)); if ( !checkEqual(*newRules, cRuleResult, 12) ) { errln("ERROR: complex plural rules failed! - exitting"); return; } newRules.adoptInstead(test->createRules(complexRule2, status)); if ( !checkEqual(*newRules, cRuleResult, 12) ) { errln("ERROR: complex plural rules failed! - exitting"); return; } // ======= Test decimal fractions plural rules UnicodeString decimalRule= UNICODE_STRING_SIMPLE("a: n not in 0..100;"); UnicodeString KEYWORD_A = UNICODE_STRING_SIMPLE("a"); status = U_ZERO_ERROR; newRules.adoptInstead(test->createRules(decimalRule, status)); if (U_FAILURE(status)) { dataerrln("ERROR: Could not create PluralRules for testing fractions - exitting"); return; } double fData[] = {-101, -100, -1, -0.0, 0, 0.1, 1, 1.999, 2.0, 100, 100.001 }; UBool isKeywordA[] = {TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE }; for (int32_t i=0; i<LENGTHOF(fData); i++) { if ((newRules->select(fData[i])== KEYWORD_A) != isKeywordA[i]) { errln("File %s, Line %d, ERROR: plural rules for decimal fractions test failed!\n" " number = %g, expected %s", __FILE__, __LINE__, fData[i], isKeywordA[i]?"TRUE":"FALSE"); } } // ======= Test Equality logln("Testing Equality of PluralRules"); if ( !testEquality(*test) ) { errln("ERROR: complex plural rules failed! - exitting"); return; } // ======= Test getStaticClassID() logln("Testing getStaticClassID()"); if(test->getDynamicClassID() != PluralRules::getStaticClassID()) { errln("ERROR: getDynamicClassID() didn't return the expected value"); } // ====== Test fallback to parent locale LocalPointer<PluralRules> en_UK(test->forLocale(Locale::getUK(), status)); LocalPointer<PluralRules> en(test->forLocale(Locale::getEnglish(), status)); if (en_UK.isValid() && en.isValid()) { if ( *en_UK != *en ) { errln("ERROR: test locale fallback failed!"); } } LocalPointer<PluralRules> zh_Hant(test->forLocale(Locale::getTaiwan(), status)); LocalPointer<PluralRules> zh(test->forLocale(Locale::getChinese(), status)); if (zh_Hant.isValid() && zh.isValid()) { if ( *zh_Hant != *zh ) { errln("ERROR: test locale fallback failed!"); } } }