/src/icu/icu4c/source/test/fuzzer/fuzzer_utils.h
Line | Count | Source |
1 | | // © 2019 and later: Unicode, Inc. and others. |
2 | | // License & terms of use: http://www.unicode.org/copyright.html |
3 | | |
4 | | #ifndef FUZZER_UTILS_H_ |
5 | | #define FUZZER_UTILS_H_ |
6 | | |
7 | | #include <assert.h> |
8 | | |
9 | | #include "unicode/locid.h" |
10 | | #include "unicode/numsys.h" |
11 | | #include "unicode/strenum.h" |
12 | | |
13 | 69.5k | const icu::Locale& GetRandomLocale(uint16_t rnd) { |
14 | 69.5k | int32_t num_locales = 0; |
15 | 69.5k | const icu::Locale* locales = icu::Locale::getAvailableLocales(num_locales); |
16 | 69.5k | assert(num_locales > 0); |
17 | 69.5k | return locales[rnd % num_locales]; |
18 | 69.5k | } |
19 | | |
20 | 318 | const icu::NumberingSystem* CreateRandomNumberingSystem(uint16_t rnd, UErrorCode &status) { |
21 | 318 | std::unique_ptr<icu::StringEnumeration> se(icu::NumberingSystem::getAvailableNames(status)); |
22 | 318 | if (U_FAILURE(status)) return nullptr; |
23 | 318 | int32_t count = se->count(status); |
24 | 318 | if (U_FAILURE(status)) return nullptr; |
25 | 318 | int32_t index = rnd % count; |
26 | 318 | se->reset(status); |
27 | 11.6k | for (int32_t i = 0; i < index - 1; i++, se->next(nullptr, status)) { |
28 | | // empty |
29 | 11.3k | } |
30 | 318 | const char* name = se->next(nullptr, status); |
31 | 318 | if (U_FAILURE(status)) return nullptr; |
32 | 318 | return icu::NumberingSystem::createInstanceByName(name, status); |
33 | 318 | } |
34 | | |
35 | | |
36 | | #endif // FUZZER_UTILS_H_ |