1 /********************************************************************
2 * Copyright (c) 2011, International Business Machines Corporation
3 * and others. All Rights Reserved.
4 ********************************************************************/
5 /* C API TEST FOR PLURAL RULES */
7 #include "unicode/utypes.h"
9 #if !UCONFIG_NO_FORMATTING
11 #include "unicode/upluralrules.h"
12 #include "unicode/ustring.h"
16 static void TestPluralRules(void);
18 void addPluralRulesTest(TestNode
** root
);
20 #define TESTCASE(x) addTest(root, &x, "tsformat/cpluralrulestest/" #x)
22 void addPluralRulesTest(TestNode
** root
)
24 TESTCASE(TestPluralRules
);
30 const char * keywordExpected
;
31 } PluralRulesTestItem
;
33 /* Just a small set of tests for now, other functionality is tested in the C++ tests */
34 static const PluralRulesTestItem testItems
[] = {
36 { "en", 0.5, "other" },
38 { "en", 1.5, "other" },
46 { "ru", 0.5, "other" },
48 { "ru", 1.5, "other" },
60 static void TestPluralRules()
62 const PluralRulesTestItem
* testItemPtr
;
63 log_verbose("\nTesting uplrules_open() and uplrules_select() with various parameters\n");
64 for ( testItemPtr
= testItems
; testItemPtr
->locale
!= NULL
; ++testItemPtr
) {
65 UErrorCode status
= U_ZERO_ERROR
;
66 UPluralRules
* uplrules
= uplrules_open(testItemPtr
->locale
, &status
);
67 if ( U_SUCCESS(status
) ) {
68 UChar keyword
[kKeywordBufLen
];
69 UChar keywordExpected
[kKeywordBufLen
];
70 int32_t keywdLen
= uplrules_select(uplrules
, testItemPtr
->number
, keyword
, kKeywordBufLen
, &status
);
71 if (keywdLen
>= kKeywordBufLen
) {
72 keyword
[kKeywordBufLen
-1] = 0;
74 if ( U_SUCCESS(status
) ) {
75 u_unescape(testItemPtr
->keywordExpected
, keywordExpected
, kKeywordBufLen
);
76 if ( u_strcmp(keyword
, keywordExpected
) != 0 ) {
77 char bcharBuf
[kKeywordBufLen
];
78 log_data_err("ERROR: uplrules_select for locale %s, number %.1f: expect %s, get %s\n",
79 testItemPtr
->locale
, testItemPtr
->number
, testItemPtr
->keywordExpected
, u_austrcpy(bcharBuf
,keyword
) );
82 log_err("FAIL: uplrules_select for locale %s, number %.1f: %s\n",
83 testItemPtr
->locale
, testItemPtr
->number
, myErrorName(status
) );
85 uplrules_close(uplrules
);
87 log_err("FAIL: uplrules_open for locale %s: %s\n", testItemPtr
->locale
, myErrorName(status
) );
92 #endif /* #if !UCONFIG_NO_FORMATTING */