/src/icu/icu4c/source/test/fuzzer/fuzzer_utils.h
Line | Count | Source (jump to first uncovered line) |
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 | | struct IcuEnvironment { |
14 | 32 | IcuEnvironment() { |
15 | | // nothing to initialize yet; |
16 | 32 | } |
17 | | }; |
18 | | |
19 | 65.8k | const icu::Locale& GetRandomLocale(uint16_t rnd) { |
20 | 65.8k | int32_t num_locales = 0; |
21 | 65.8k | const icu::Locale* locales = icu::Locale::getAvailableLocales(num_locales); |
22 | 65.8k | assert(num_locales > 0); |
23 | 65.8k | return locales[rnd % num_locales]; |
24 | 65.8k | } |
25 | | |
26 | 312 | const icu::NumberingSystem* CreateRandomNumberingSystem(uint16_t rnd, UErrorCode &status) { |
27 | 312 | std::unique_ptr<icu::StringEnumeration> se(icu::NumberingSystem::getAvailableNames(status)); |
28 | 312 | if (U_FAILURE(status)) return nullptr; |
29 | 312 | int32_t count = se->count(status); |
30 | 312 | if (U_FAILURE(status)) return nullptr; |
31 | 312 | int32_t index = rnd % count; |
32 | 312 | se->reset(status); |
33 | 12.6k | for (int32_t i = 0; i < index - 1; i++, se->next(nullptr, status)) { |
34 | | // empty |
35 | 12.2k | } |
36 | 312 | const char* name = se->next(nullptr, status); |
37 | 312 | if (U_FAILURE(status)) return nullptr; |
38 | 312 | return icu::NumberingSystem::createInstanceByName(name, status); |
39 | 312 | } |
40 | | |
41 | | |
42 | | #endif // FUZZER_UTILS_H_ |