ICU-22716 Test more number format

This commit is contained in:
Frank Tang 2024-09-06 18:34:05 -07:00 committed by Frank Yung-Fong Tang
parent 266a2b8de2
commit 3a74fcf052

View file

@ -9,7 +9,11 @@
#include <string>
#include <memory>
#include "fuzzer_utils.h"
#include "unicode/choicfmt.h"
#include "unicode/compactdecimalformat.h"
#include "unicode/decimfmt.h"
#include "unicode/numfmt.h"
#include "unicode/rbnf.h"
IcuEnvironment* env = new IcuEnvironment();
@ -31,15 +35,61 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
const icu::Locale& locale = GetRandomLocale(rnd);
std::unique_ptr<icu::NumberFormat> fmt(
icu::NumberFormat::createInstance(locale, status));
if (U_FAILURE(status)) {
return 0;
}
icu::UnicodeString fuzzstr(false, fuzzbuff.get(), unistr_size);
icu::Formattable result;
fmt->parse(fuzzstr, result, status);
std::unique_ptr<icu::NumberFormat> fmt(
icu::NumberFormat::createInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
fmt.reset(icu::NumberFormat::createCurrencyInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
fmt.reset(icu::NumberFormat::createPercentInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
fmt.reset(icu::NumberFormat::createScientificInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
icu::ChoiceFormat cfmt(fuzzstr, status);
if (U_SUCCESS(status)) {
cfmt.parse(fuzzstr, result, status);
}
UParseError perror;
status = U_ZERO_ERROR;
icu::RuleBasedNumberFormat rbfmt(fuzzstr, locale, perror, status);
if (U_SUCCESS(status)) {
rbfmt.parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
icu::DecimalFormat dfmt(fuzzstr, status);
if (U_SUCCESS(status)) {
dfmt.parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
fmt.reset(icu::CompactDecimalFormat::createInstance(locale, UNUM_SHORT, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
status = U_ZERO_ERROR;
fmt.reset(icu::CompactDecimalFormat::createInstance(locale, UNUM_LONG, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
return 0;
}