int main(int argc, char *argv[]){ int i=1,kmax; double x0,x1,f0,epsilon,error; x0 = atof(argv[1]); epsilon = atof(argv[2]); kmax = atoi(argv[3]); f0 = f(x0); while (i <= kmax){ if (fD(x0) == 0){ printf("Method fails!"); exit(0); } x1 = x0 - (f0/fD(x0)); error = fabs(f(x1)); if(error < epsilon){ printf("Iteration %d: x=%.10f, error=%.10f\n",i,x1,error); break; } printf("Iteration %d: x=%.10f, error=%.10f\n",i,x1,error); x0 = x1; f0 = f(x1); i++; } return 0; }
int main (void) { A2 = fA(); B2 = fB(); C2 = fC(); D2 = fD(); return all (0); }
/** * This test does round-trip testing (format -> parse -> format -> parse -> etc.) of * NumberFormat. */ void IntlTestNumberFormatAPI::testAPI(/* char* par */) { UErrorCode status = U_ZERO_ERROR; // ======= Test constructors logln("Testing NumberFormat constructors"); NumberFormat *def = NumberFormat::createInstance(status); if(U_FAILURE(status)) { errln("ERROR: Could not create NumberFormat (default)"); } status = U_ZERO_ERROR; NumberFormat *fr = NumberFormat::createInstance(Locale::getFrench(), status); if(U_FAILURE(status)) { errln("ERROR: Could not create NumberFormat (French)"); } NumberFormat *cur = NumberFormat::createCurrencyInstance(status); if(U_FAILURE(status)) { errln("ERROR: Could not create NumberFormat (currency, default)"); } status = U_ZERO_ERROR; NumberFormat *cur_fr = NumberFormat::createCurrencyInstance(Locale::getFrench(), status); if(U_FAILURE(status)) { errln("ERROR: Could not create NumberFormat (currency, French)"); } NumberFormat *per = NumberFormat::createPercentInstance(status); if(U_FAILURE(status)) { errln("ERROR: Could not create NumberFormat (percent, default)"); } status = U_ZERO_ERROR; NumberFormat *per_fr = NumberFormat::createPercentInstance(Locale::getFrench(), status); if(U_FAILURE(status)) { errln("ERROR: Could not create NumberFormat (percent, French)"); } // ======= Test equality if (per_fr != NULL && cur_fr != NULL) { logln("Testing equality operator"); if( *per_fr == *cur_fr || ! ( *per_fr != *cur_fr) ) { errln("ERROR: == failed"); } } // ======= Test various format() methods if (cur_fr != NULL) { logln("Testing various format() methods"); double d = -10456.0037; int32_t l = 100000000; Formattable fD(d); Formattable fL(l); UnicodeString res1, res2, res3, res4, res5, res6; FieldPosition pos1(0), pos2(0), pos3(0), pos4(0); res1 = cur_fr->format(d, res1); logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res1); res2 = cur_fr->format(l, res2); logln((UnicodeString) "" + (int32_t) l + " formatted to " + res2); res3 = cur_fr->format(d, res3, pos1); logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res3); res4 = cur_fr->format(l, res4, pos2); logln((UnicodeString) "" + (int32_t) l + " formatted to " + res4); status = U_ZERO_ERROR; res5 = cur_fr->format(fD, res5, pos3, status); if(U_FAILURE(status)) { errln("ERROR: format(Formattable [double]) failed"); } logln((UnicodeString) "" + (int32_t) fD.getDouble() + " formatted to " + res5); status = U_ZERO_ERROR; res6 = cur_fr->format(fL, res6, pos4, status); if(U_FAILURE(status)) { errln("ERROR: format(Formattable [long]) failed"); } logln((UnicodeString) "" + fL.getLong() + " formatted to " + res6); } // ======= Test parse() if (fr != NULL) { logln("Testing parse()"); double d = -10456.0037; UnicodeString text("-10,456.0037"); Formattable result1, result2, result3; ParsePosition pos(0), pos01(0); fr->parseObject(text, result1, pos); if(result1.getType() != Formattable::kDouble && result1.getDouble() != d) { errln("ERROR: Roundtrip failed (via parse()) for " + text); } logln(text + " parsed into " + (int32_t) result1.getDouble()); fr->parse(text, result2, pos01); if(result2.getType() != Formattable::kDouble && result2.getDouble() != d) { errln("ERROR: Roundtrip failed (via parse()) for " + text); } logln(text + " parsed into " + (int32_t) result2.getDouble()); status = U_ZERO_ERROR; fr->parse(text, result3, status); if(U_FAILURE(status)) { errln("ERROR: parse() failed"); } if(result3.getType() != Formattable::kDouble && result3.getDouble() != d) { errln("ERROR: Roundtrip failed (via parse()) for " + text); } logln(text + " parsed into " + (int32_t) result3.getDouble()); } // ======= Test getters and setters if (fr != NULL && def != NULL) { logln("Testing getters and setters"); int32_t count = 0; const Locale *locales = NumberFormat::getAvailableLocales(count); logln((UnicodeString) "Got " + count + " locales" ); for(int32_t i = 0; i < count; i++) { UnicodeString name(locales[i].getName(),""); logln(name); } fr->setParseIntegerOnly( def->isParseIntegerOnly() ); if(fr->isParseIntegerOnly() != def->isParseIntegerOnly() ) { errln("ERROR: setParseIntegerOnly() failed"); } fr->setGroupingUsed( def->isGroupingUsed() ); if(fr->isGroupingUsed() != def->isGroupingUsed() ) { errln("ERROR: setGroupingUsed() failed"); } fr->setMaximumIntegerDigits( def->getMaximumIntegerDigits() ); if(fr->getMaximumIntegerDigits() != def->getMaximumIntegerDigits() ) { errln("ERROR: setMaximumIntegerDigits() failed"); } fr->setMinimumIntegerDigits( def->getMinimumIntegerDigits() ); if(fr->getMinimumIntegerDigits() != def->getMinimumIntegerDigits() ) { errln("ERROR: setMinimumIntegerDigits() failed"); } fr->setMaximumFractionDigits( def->getMaximumFractionDigits() ); if(fr->getMaximumFractionDigits() != def->getMaximumFractionDigits() ) { errln("ERROR: setMaximumFractionDigits() failed"); } fr->setMinimumFractionDigits( def->getMinimumFractionDigits() ); if(fr->getMinimumFractionDigits() != def->getMinimumFractionDigits() ) { errln("ERROR: setMinimumFractionDigits() failed"); } } // ======= Test getStaticClassID() logln("Testing getStaticClassID()"); status = U_ZERO_ERROR; NumberFormat *test = new DecimalFormat(status); if(U_FAILURE(status)) { errln("ERROR: Couldn't create a NumberFormat"); } if(test->getDynamicClassID() != DecimalFormat::getStaticClassID()) { errln("ERROR: getDynamicClassID() didn't return the expected value"); } delete test; delete def; delete fr; delete cur; delete cur_fr; delete per; delete per_fr; }
/** * This test checks various generic API methods in DateFormat to achieve 100% * API coverage. */ void IntlTestDateFormatAPI::testAPI(/* char* par */) { UErrorCode status = U_ZERO_ERROR; // ======= Test constructors logln("Testing DateFormat constructors"); DateFormat *def = DateFormat::createInstance(); DateFormat *fr = DateFormat::createTimeInstance(DateFormat::FULL, Locale::getFrench()); DateFormat *it = DateFormat::createDateInstance(DateFormat::MEDIUM, Locale::getItalian()); DateFormat *de = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG, Locale::getGerman()); if (def == NULL || fr == NULL || it == NULL || de == NULL){ dataerrln("Error creating instnaces."); } // ======= Test equality if (fr != NULL && def != NULL) { logln("Testing equality operator"); if( *fr == *it ) { errln("ERROR: == failed"); } } // ======= Test various format() methods if (fr != NULL && it != NULL && de != NULL) { logln("Testing various format() methods"); UDate d = 837039928046.0; Formattable fD(d, Formattable::kIsDate); UnicodeString res1, res2, res3; FieldPosition pos1(0), pos2(0); status = U_ZERO_ERROR; res1 = fr->format(d, res1, pos1, status); if(U_FAILURE(status)) { errln("ERROR: format() failed (French)"); } logln( (UnicodeString) "" + d + " formatted to " + res1); res2 = it->format(d, res2, pos2); logln( (UnicodeString) "" + d + " formatted to " + res2); res3 = de->format(d, res3); logln( (UnicodeString) "" + d + " formatted to " + res3); } // ======= Test parse() if (def != NULL) { logln("Testing parse()"); UnicodeString text("02/03/76 2:50 AM, CST"); Formattable result1; UDate result2, result3; ParsePosition pos(0), pos01(0); def->parseObject(text, result1, pos); if(result1.getType() != Formattable::kDate) { errln("ERROR: parseObject() failed for " + text); } logln(text + " parsed into " + result1.getDate()); status = U_ZERO_ERROR; result2 = def->parse(text, status); if(U_FAILURE(status)) { errln("ERROR: parse() failed, stopping testing"); return; } logln(text + " parsed into " + result2); result3 = def->parse(text, pos01); logln(text + " parsed into " + result3); } // ======= Test getters and setters if (fr != NULL && it != NULL && de != NULL) { logln("Testing getters and setters"); int32_t count = 0; const Locale *locales = DateFormat::getAvailableLocales(count); logln((UnicodeString) "Got " + count + " locales" ); for(int32_t i = 0; i < count; i++) { UnicodeString name; name = locales[i].getName(); logln(name); } fr->setLenient(it->isLenient()); if(fr->isLenient() != it->isLenient()) { errln("ERROR: setLenient() failed"); } const Calendar *cal = def->getCalendar(); Calendar *newCal = cal->clone(); de->adoptCalendar(newCal); it->setCalendar(*newCal); if( *(de->getCalendar()) != *(it->getCalendar())) { errln("ERROR: adopt or set Calendar() failed"); } const NumberFormat *nf = def->getNumberFormat(); NumberFormat *newNf = (NumberFormat*) nf->clone(); de->adoptNumberFormat(newNf); it->setNumberFormat(*newNf); if( *(de->getNumberFormat()) != *(it->getNumberFormat())) { errln("ERROR: adopt or set NumberFormat() failed"); } const TimeZone& tz = def->getTimeZone(); TimeZone *newTz = tz.clone(); de->adoptTimeZone(newTz); it->setTimeZone(*newTz); if( de->getTimeZone() != it->getTimeZone()) { errln("ERROR: adopt or set TimeZone() failed"); } } // ======= Test getStaticClassID() logln("Testing getStaticClassID()"); status = U_ZERO_ERROR; DateFormat *test = new SimpleDateFormat(status); if(U_FAILURE(status)) { errln("ERROR: Couldn't create a DateFormat"); } if(test->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) { errln("ERROR: getDynamicClassID() didn't return the expected value"); } delete test; delete def; delete fr; delete it; delete de; }
float forceThin(float** arr, const int N, const int M, const int x, const int y, const std::vector<ivec2> borders) { vec2 a(x-0.5,y+0.5); vec2 b(x+0.5,y+0.5); vec2 c(x+0.5,y-0.5); vec2 d(x-0.5,y-0.5); vec2 fA(0.0,0.0); vec2 fB(0.0,0.0); vec2 fC(0.0,0.0); vec2 fD(0.0,0.0); for (unsigned int i=0; i < borders.size(); ++i) { if (distance(ivec2(x,y), borders[i]) <= 16) { std::vector<ivec2> line; line = draw_line(ivec2(x,y), borders[i]); bool outofsight = false; //printf("(%d,%d)\n(%d,%d) %zd\n", x, y, borders[i].x, borders[i].y, line.size()); for (unsigned int j=0; j < line.size(); ++j) { //printf("\t%d\n", j); outofsight |= arr[line[j].x][line[j].y] == 0.5; } if (!outofsight) { float dist = distance(a, borders[i]); float dx = a.x - borders[i].x; float dy = a.y - borders[i].y; fA = fA + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist); dist = distance(b, borders[i]); dx = b.x - borders[i].x; dy = b.y - borders[i].y; fB = fB + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist); dist = distance(c, borders[i]); dx = c.x - borders[i].x; dy = c.y - borders[i].y; fC = fC + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist); dist = distance(d, borders[i]); dx = d.x - borders[i].x; dy = d.y - borders[i].y; fD = fD + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist); } } } //S |= fA.x*fB.x <= 0.0 && abs(fA.y)+abs(fB.y) > abs(fA.x)+abs(fB.x); //S |= fC.x*fD.x <= 0.0 && abs(fC.y)+abs(fD.y) > abs(fC.x)+abs(fD.x); //S |= fA.y*fD.y <= 0.0 && abs(fA.y)+abs(fD.y) > abs(fA.x)+abs(fD.x); //S |= fB.y*fC.y <= 0.0 && abs(fB.y)+abs(fC.y) > abs(fB.x)+abs(fC.x); //S |= fA.x*fC.x <= 0.0 && fA.y * fC.y <= 0.0; //S |= fB.x*fD.x <= 0.0 && fB.y * fD.y <= 0.0; //S |= fA.x*fB.x <= 0.0 && fC.x*fD.x <= 0.0 && (abs(fA.x)+abs(fB.x) > abs(fA.y)+abs(fB.y) || abs(fC.x)+abs(fD.x) > abs(fC.y)+abs(fD.y)); //S |= fA.y*fD.y <= 0.0 && fB.y*fC.y <= 0.0 && (abs(fA.y)+abs(fD.y) > abs(fA.x)+abs(fD.x) || abs(fB.y)+abs(fC.y) > abs(fB.x)+abs(fC.x)); //S |= fA.x*fC.x <= 0.0 && fA.y*fC.y <= 0.0; //S |= fB.x*fD.x <= 0.0 && fB.y*fD.y <= 0.0; //dot products to find change in direction float dot; float min_dot = INFINITY; dot = fA.x*fB.x + fA.y*fB.y; if (dot < min_dot) min_dot = dot; dot = fB.x*fC.x + fB.y*fC.y; if (dot < min_dot) min_dot = dot; dot = fA.x*fD.x + fA.y*fD.y; if (dot < min_dot) min_dot = dot; dot = fC.x*fD.x + fC.y*fD.y; if (dot < min_dot) min_dot = dot; dot = fA.x*fC.x + fA.y*fC.y; if (dot < min_dot) min_dot = dot; dot = fB.x*fD.x + fB.y*fD.y; if (dot < min_dot) min_dot = dot; return min_dot; }
void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/) { UErrorCode status = U_ZERO_ERROR; // ======= Test constructors logln("Testing SimpleDateFormat constructors"); SimpleDateFormat def(status); if(U_FAILURE(status)) { dataerrln("ERROR: Could not create SimpleDateFormat (default) - exitting"); return; } status = U_ZERO_ERROR; const UnicodeString pattern("yyyy.MM.dd G 'at' hh:mm:ss z"); const UnicodeString override("y=hebr;d=thai;s=arab"); const UnicodeString override_bogus("y=hebr;d=thai;s=bogus"); SimpleDateFormat pat(pattern, status); if(U_FAILURE(status)) { errln("ERROR: Could not create SimpleDateFormat (pattern)"); } status = U_ZERO_ERROR; SimpleDateFormat pat_fr(pattern, Locale::getFrench(), status); if(U_FAILURE(status)) { errln("ERROR: Could not create SimpleDateFormat (pattern French)"); } status = U_ZERO_ERROR; DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getFrench(), status); if(U_FAILURE(status)) { errln("ERROR: Could not create DateFormatSymbols (French)"); } status = U_ZERO_ERROR; SimpleDateFormat cust1(pattern, symbols, status); if(U_FAILURE(status)) { dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exitting"); return; } status = U_ZERO_ERROR; SimpleDateFormat cust2(pattern, *symbols, status); if(U_FAILURE(status)) { errln("ERROR: Could not create SimpleDateFormat (pattern, symbols)"); } status = U_ZERO_ERROR; SimpleDateFormat ovr1(pattern, override, status); if(U_FAILURE(status)) { errln("ERROR: Could not create SimpleDateFormat (pattern, override)"); } status = U_ZERO_ERROR; SimpleDateFormat ovr2(pattern, override, Locale::getGerman(), status); if(U_FAILURE(status)) { errln("ERROR: Could not create SimpleDateFormat (pattern, override, locale)"); } status = U_ZERO_ERROR; SimpleDateFormat ovr3(pattern, override_bogus, Locale::getGerman(), status); if(U_SUCCESS(status)) { errln("ERROR: Should not have been able to create SimpleDateFormat (pattern, override, locale) with a bogus override"); } SimpleDateFormat copy(pat); // ======= Test clone(), assignment, and equality logln("Testing clone(), assignment and equality operators"); if( ! (copy == pat) || copy != pat) { errln("ERROR: Copy constructor (or ==) failed"); } copy = cust1; if(copy != cust1) { errln("ERROR: Assignment (or !=) failed"); } Format *clone = def.clone(); if( ! (*clone == def) ) { errln("ERROR: Clone() (or ==) failed"); } delete clone; // ======= Test various format() methods logln("Testing various format() methods"); UDate d = 837039928046.0; Formattable fD(d, Formattable::kIsDate); UnicodeString res1, res2; FieldPosition pos1(0), pos2(0); res1 = def.format(d, res1, pos1); logln( (UnicodeString) "" + d + " formatted to " + res1); status = U_ZERO_ERROR; res2 = cust1.format(fD, res2, pos2, status); if(U_FAILURE(status)) { errln("ERROR: format(Formattable [Date]) failed"); } logln((UnicodeString) "" + fD.getDate() + " formatted to " + res2); // ======= Test parse() logln("Testing parse()"); UnicodeString text("02/03/76 2:50 AM, CST"); UDate result1, result2; ParsePosition pos(0); result1 = def.parse(text, pos); logln(text + " parsed into " + result1); status = U_ZERO_ERROR; result2 = def.parse(text, status); if(U_FAILURE(status)) { errln("ERROR: parse() failed"); } logln(text + " parsed into " + result2); // ======= Test getters and setters logln("Testing getters and setters"); const DateFormatSymbols *syms = pat.getDateFormatSymbols(); if(!syms) { errln("Couldn't obtain DateFormatSymbols. Quitting test!"); return; } if(syms->getDynamicClassID() != DateFormatSymbols::getStaticClassID()) { errln("ERROR: format->getDateFormatSymbols()->getDynamicClassID() != DateFormatSymbols::getStaticClassID()"); } DateFormatSymbols *newSyms = new DateFormatSymbols(*syms); def.adoptDateFormatSymbols(newSyms); pat_fr.setDateFormatSymbols(*newSyms); if( *(pat.getDateFormatSymbols()) != *(def.getDateFormatSymbols())) { errln("ERROR: adopt or set DateFormatSymbols() failed"); } status = U_ZERO_ERROR; UDate startDate = pat.get2DigitYearStart(status); if(U_FAILURE(status)) { errln("ERROR: getTwoDigitStartDate() failed"); } status = U_ZERO_ERROR; pat_fr.set2DigitYearStart(startDate, status); if(U_FAILURE(status)) { errln("ERROR: setTwoDigitStartDate() failed"); } // ======= Test DateFormatSymbols constructor newSyms =new DateFormatSymbols("gregorian", status); if(U_FAILURE(status)) { errln("ERROR: new DateFormatSymbols() failed"); } def.adoptDateFormatSymbols(newSyms); // ======= Test applyPattern() logln("Testing applyPattern()"); UnicodeString p1("yyyy.MM.dd G 'at' hh:mm:ss z"); logln("Applying pattern " + p1); status = U_ZERO_ERROR; pat.applyPattern(p1); UnicodeString s2; s2 = pat.toPattern(s2); logln("Extracted pattern is " + s2); if(s2 != p1) { errln("ERROR: toPattern() result did not match pattern applied"); } logln("Applying pattern " + p1); status = U_ZERO_ERROR; pat.applyLocalizedPattern(p1, status); if(U_FAILURE(status)) { errln("ERROR: applyPattern() failed with " + (int32_t) status); } UnicodeString s3; status = U_ZERO_ERROR; s3 = pat.toLocalizedPattern(s3, status); if(U_FAILURE(status)) { errln("ERROR: toLocalizedPattern() failed"); } logln("Extracted pattern is " + s3); if(s3 != p1) { errln("ERROR: toLocalizedPattern() result did not match pattern applied"); } // ======= Test getStaticClassID() logln("Testing getStaticClassID()"); status = U_ZERO_ERROR; DateFormat *test = new SimpleDateFormat(status); if(U_FAILURE(status)) { errln("ERROR: Couldn't create a SimpleDateFormat"); } if(test->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) { errln("ERROR: getDynamicClassID() didn't return the expected value"); } delete test; // ======= Test Ticket 5684 (Parsing with 'e' and 'Y') SimpleDateFormat object(UNICODE_STRING_SIMPLE("YYYY'W'wwe"), status); if(U_FAILURE(status)) { errln("ERROR: Couldn't create a SimpleDateFormat"); } object.setLenient(false); ParsePosition pp(0); UDate udDate = object.parse("2007W014", pp); if ((double)udDate == 0.0) { errln("ERROR: Parsing failed using 'Y' and 'e'"); } }
void ReportViewWidget::on_actionSaveQry_triggered() { if (m_currentQry.isEmpty()) { ReportFileDialog fD(m_dirModel, this); start: if (fD.exec() != QDialog::Accepted) return; if (fD.fileName().isEmpty()) return; m_currentQry = fD.path() + "/" + fD.fileName(); if (QFile(m_currentQry).exists()) { if (QMessageBox::question(this, "CuteFarm", tr("File %1 exists.\nReplace?") .arg(m_currentQry), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) goto start; } QFile file(m_currentQry); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, "CuteFarm", tr("Can not save file %1\n%2.") .arg(file.fileName()) .arg(file.errorString())); return; } QTextStream out(&file); out << "<?xml version='1.0' encoding='UTF-8'?>\n" "<!DOCTYPE qry>\n" "<qry version=\"1.0\">\n" " <description>"+ Qt::escape(ui.textEditComt->toPlainText()) +"</description>\n" " <sql>"+ Qt::escape(ui.textEditSql->toPlainText()) +"</sql>\n" "</qry>\n"; QModelIndex parent = ui.dirView->currentIndex().parent(); m_dirModel->refresh(parent); file.close(); m_actnQryButton->setText(QFileInfo(file.fileName()).fileName()); return; } QFile file(m_currentQry); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, "CuteFarm", tr("Can not save file %1\n%2.") .arg(QFile(m_currentQry).fileName()) .arg(file.errorString())); return; } QDomElement root = m_domDocument.documentElement(); QDomElement oldDesc = root.firstChildElement("description"); QDomElement newDesc = m_domDocument.createElement("description"); QDomText newDescText = m_domDocument.createTextNode(ui.textEditComt->toPlainText()); newDesc.appendChild(newDescText); root.replaceChild(newDesc, oldDesc); QDomElement oldSql = root.firstChildElement("sql"); QDomElement newSql = m_domDocument.createElement("sql"); QDomText newSqlText = m_domDocument.createTextNode(ui.textEditSql->toPlainText()); newSql.appendChild(newSqlText); root.replaceChild(newSql, oldSql); const int IndentSize = 4; QTextStream out(&file); m_domDocument.save(out, IndentSize); file.close(); QModelIndex parent = ui.dirView->currentIndex().parent(); m_dirModel->refresh(parent); emit statusMsg(tr("Saved: %1").arg(m_currentQry), 5000); }
/** * This test checks various generic API methods in DecimalFormat to achieve 100% * API coverage. */ void IntlTestDecimalFormatAPI::testAPI(/*char *par*/) { UErrorCode status = U_ZERO_ERROR; // ======= Test constructors logln((UnicodeString)"Testing DecimalFormat constructors"); DecimalFormat def(status); if(U_FAILURE(status)) { errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); return; } // bug 10864 status = U_ZERO_ERROR; DecimalFormat noGrouping("###0.##", status); if (noGrouping.getGroupingSize() != 0) { errln("Grouping size should be 0 for no grouping."); } // end bug 10864 status = U_ZERO_ERROR; const UnicodeString pattern("#,##0.# FF"); DecimalFormat pat(pattern, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern)"); return; } status = U_ZERO_ERROR; DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getFrench(), status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (French)"); return; } status = U_ZERO_ERROR; DecimalFormat cust1(pattern, symbols, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)"); } status = U_ZERO_ERROR; DecimalFormat cust2(pattern, *symbols, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols)"); } DecimalFormat copy(pat); // ======= Test clone(), assignment, and equality logln((UnicodeString)"Testing clone(), assignment and equality operators"); if( ! (copy == pat) || copy != pat) { errln((UnicodeString)"ERROR: Copy constructor or == failed"); } copy = cust1; if(copy != cust1) { errln((UnicodeString)"ERROR: Assignment (or !=) failed"); } Format *clone = def.clone(); if( ! (*clone == def) ) { errln((UnicodeString)"ERROR: Clone() failed"); } delete clone; // ======= Test various format() methods logln((UnicodeString)"Testing various format() methods"); double d = -10456.0037; int32_t l = 100000000; Formattable fD(d); Formattable fL(l); UnicodeString res1, res2, res3, res4; FieldPosition pos1(0), pos2(0), pos3(0), pos4(0); res1 = def.format(d, res1, pos1); logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res1); res2 = pat.format(l, res2, pos2); logln((UnicodeString) "" + (int32_t) l + " formatted to " + res2); status = U_ZERO_ERROR; res3 = cust1.format(fD, res3, pos3, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: format(Formattable [double]) failed"); } logln((UnicodeString) "" + (int32_t) fD.getDouble() + " formatted to " + res3); status = U_ZERO_ERROR; res4 = cust2.format(fL, res4, pos4, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: format(Formattable [long]) failed"); } logln((UnicodeString) "" + fL.getLong() + " formatted to " + res4); // ======= Test parse() logln((UnicodeString)"Testing parse()"); UnicodeString text("-10,456.0037"); Formattable result1, result2; ParsePosition pos(0); UnicodeString patt("#,##0.#"); status = U_ZERO_ERROR; pat.applyPattern(patt, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: applyPattern() failed"); } pat.parse(text, result1, pos); if(result1.getType() != Formattable::kDouble && result1.getDouble() != d) { errln((UnicodeString)"ERROR: Roundtrip failed (via parse()) for " + text); } logln(text + " parsed into " + (int32_t) result1.getDouble()); status = U_ZERO_ERROR; pat.parse(text, result2, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: parse() failed"); } if(result2.getType() != Formattable::kDouble && result2.getDouble() != d) { errln((UnicodeString)"ERROR: Roundtrip failed (via parse()) for " + text); } logln(text + " parsed into " + (int32_t) result2.getDouble()); // ======= Test getters and setters logln((UnicodeString)"Testing getters and setters"); const DecimalFormatSymbols *syms = pat.getDecimalFormatSymbols(); DecimalFormatSymbols *newSyms = new DecimalFormatSymbols(*syms); def.setDecimalFormatSymbols(*newSyms); def.adoptDecimalFormatSymbols(newSyms); // don't use newSyms after this if( *(pat.getDecimalFormatSymbols()) != *(def.getDecimalFormatSymbols())) { errln((UnicodeString)"ERROR: adopt or set DecimalFormatSymbols() failed"); } UnicodeString posPrefix; pat.setPositivePrefix("+"); posPrefix = pat.getPositivePrefix(posPrefix); logln((UnicodeString)"Positive prefix (should be +): " + posPrefix); if(posPrefix != "+") { errln((UnicodeString)"ERROR: setPositivePrefix() failed"); } UnicodeString negPrefix; pat.setNegativePrefix("-"); negPrefix = pat.getNegativePrefix(negPrefix); logln((UnicodeString)"Negative prefix (should be -): " + negPrefix); if(negPrefix != "-") { errln((UnicodeString)"ERROR: setNegativePrefix() failed"); } UnicodeString posSuffix; pat.setPositiveSuffix("_"); posSuffix = pat.getPositiveSuffix(posSuffix); logln((UnicodeString)"Positive suffix (should be _): " + posSuffix); if(posSuffix != "_") { errln((UnicodeString)"ERROR: setPositiveSuffix() failed"); } UnicodeString negSuffix; pat.setNegativeSuffix("~"); negSuffix = pat.getNegativeSuffix(negSuffix); logln((UnicodeString)"Negative suffix (should be ~): " + negSuffix); if(negSuffix != "~") { errln((UnicodeString)"ERROR: setNegativeSuffix() failed"); } int32_t multiplier = 0; pat.setMultiplier(8); multiplier = pat.getMultiplier(); logln((UnicodeString)"Multiplier (should be 8): " + multiplier); if(multiplier != 8) { errln((UnicodeString)"ERROR: setMultiplier() failed"); } int32_t groupingSize = 0; pat.setGroupingSize(2); groupingSize = pat.getGroupingSize(); logln((UnicodeString)"Grouping size (should be 2): " + (int32_t) groupingSize); if(groupingSize != 2) { errln((UnicodeString)"ERROR: setGroupingSize() failed"); } pat.setDecimalSeparatorAlwaysShown(TRUE); UBool tf = pat.isDecimalSeparatorAlwaysShown(); logln((UnicodeString)"DecimalSeparatorIsAlwaysShown (should be TRUE) is " + (UnicodeString) (tf ? "TRUE" : "FALSE")); if(tf != TRUE) { errln((UnicodeString)"ERROR: setDecimalSeparatorAlwaysShown() failed"); } // Added by Ken Liu testing set/isExponentSignAlwaysShown pat.setExponentSignAlwaysShown(TRUE); UBool esas = pat.isExponentSignAlwaysShown(); logln((UnicodeString)"ExponentSignAlwaysShown (should be TRUE) is " + (UnicodeString) (esas ? "TRUE" : "FALSE")); if(esas != TRUE) { errln((UnicodeString)"ERROR: ExponentSignAlwaysShown() failed"); } // Added by Ken Liu testing set/isScientificNotation pat.setScientificNotation(TRUE); UBool sn = pat.isScientificNotation(); logln((UnicodeString)"isScientificNotation (should be TRUE) is " + (UnicodeString) (sn ? "TRUE" : "FALSE")); if(sn != TRUE) { errln((UnicodeString)"ERROR: setScientificNotation() failed"); } // Added by Ken Liu testing set/getMinimumExponentDigits int8_t MinimumExponentDigits = 0; pat.setMinimumExponentDigits(2); MinimumExponentDigits = pat.getMinimumExponentDigits(); logln((UnicodeString)"MinimumExponentDigits (should be 2) is " + (int8_t) MinimumExponentDigits); if(MinimumExponentDigits != 2) { errln((UnicodeString)"ERROR: setMinimumExponentDigits() failed"); } // Added by Ken Liu testing set/getRoundingIncrement double RoundingIncrement = 0.0; pat.setRoundingIncrement(2.0); RoundingIncrement = pat.getRoundingIncrement(); logln((UnicodeString)"RoundingIncrement (should be 2.0) is " + (double) RoundingIncrement); if(RoundingIncrement != 2.0) { errln((UnicodeString)"ERROR: setRoundingIncrement() failed"); } //end of Ken's Adding UnicodeString funkyPat; funkyPat = pat.toPattern(funkyPat); logln((UnicodeString)"Pattern is " + funkyPat); UnicodeString locPat; locPat = pat.toLocalizedPattern(locPat); logln((UnicodeString)"Localized pattern is " + locPat); // ======= Test applyPattern() logln((UnicodeString)"Testing applyPattern()"); UnicodeString p1("#,##0.0#;(#,##0.0#)"); logln((UnicodeString)"Applying pattern " + p1); status = U_ZERO_ERROR; pat.applyPattern(p1, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: applyPattern() failed with " + (int32_t) status); } UnicodeString s2; s2 = pat.toPattern(s2); logln((UnicodeString)"Extracted pattern is " + s2); if(s2 != p1) { errln((UnicodeString)"ERROR: toPattern() result did not match pattern applied"); } if(pat.getSecondaryGroupingSize() != 0) { errln("FAIL: Secondary Grouping Size should be 0, not %d\n", pat.getSecondaryGroupingSize()); } if(pat.getGroupingSize() != 3) { errln("FAIL: Primary Grouping Size should be 3, not %d\n", pat.getGroupingSize()); } UnicodeString p2("#,##,##0.0# FF;(#,##,##0.0# FF)"); logln((UnicodeString)"Applying pattern " + p2); status = U_ZERO_ERROR; pat.applyLocalizedPattern(p2, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: applyPattern() failed with " + (int32_t) status); } UnicodeString s3; s3 = pat.toLocalizedPattern(s3); logln((UnicodeString)"Extracted pattern is " + s3); if(s3 != p2) { errln((UnicodeString)"ERROR: toLocalizedPattern() result did not match pattern applied"); } status = U_ZERO_ERROR; UParseError pe; pat.applyLocalizedPattern(p2, pe, status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: applyPattern((with ParseError)) failed with " + (int32_t) status); } UnicodeString s4; s4 = pat.toLocalizedPattern(s3); logln((UnicodeString)"Extracted pattern is " + s4); if(s4 != p2) { errln((UnicodeString)"ERROR: toLocalizedPattern(with ParseErr) result did not match pattern applied"); } if(pat.getSecondaryGroupingSize() != 2) { errln("FAIL: Secondary Grouping Size should be 2, not %d\n", pat.getSecondaryGroupingSize()); } if(pat.getGroupingSize() != 3) { errln("FAIL: Primary Grouping Size should be 3, not %d\n", pat.getGroupingSize()); } // ======= Test getStaticClassID() logln((UnicodeString)"Testing getStaticClassID()"); status = U_ZERO_ERROR; NumberFormat *test = new DecimalFormat(status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: Couldn't create a DecimalFormat"); } if(test->getDynamicClassID() != DecimalFormat::getStaticClassID()) { errln((UnicodeString)"ERROR: getDynamicClassID() didn't return the expected value"); } delete test; }