Imported Upstream version 58.1
[platform/upstream/icu.git] / source / test / intltest / testutil.cpp
1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 **********************************************************************
5 *   Copyright (C) 2001-2009, International Business Machines
6 *   Corporation and others.  All Rights Reserved.
7 **********************************************************************
8 *   Date        Name        Description
9 *   05/23/00    aliu        Creation.
10 **********************************************************************
11 */
12
13 #include "unicode/unistr.h"
14 #include "testutil.h"
15
16 static const UChar HEX[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};
17
18 UnicodeString &TestUtility::appendHex(UnicodeString &buf, UChar32 ch) {
19     if (ch >= 0x10000) {
20         if (ch >= 0x100000) {
21             buf.append(HEX[0xF&(ch>>20)]);
22         }
23         buf.append(HEX[0xF&(ch>>16)]);
24     }
25     buf.append(HEX[0xF&(ch>>12)]);
26     buf.append(HEX[0xF&(ch>>8)]);
27     buf.append(HEX[0xF&(ch>>4)]);
28     buf.append(HEX[0xF&ch]);
29     return buf;
30 }
31
32 UnicodeString TestUtility::hex(UChar32 ch) {
33     UnicodeString buf;
34     appendHex(buf, ch);
35     return buf;
36 }
37
38 UnicodeString TestUtility::hex(const UnicodeString& s) {
39     return hex(s, 44 /*,*/);
40 }
41
42 UnicodeString TestUtility::hex(const UnicodeString& s, UChar sep) {
43     UnicodeString result;
44     if (s.isEmpty()) return result;
45     UChar32 c;
46     for (int32_t i = 0; i < s.length(); i += U16_LENGTH(c)) {
47         c = s.char32At(i);
48         if (i > 0) {
49             result.append(sep);
50         }
51         appendHex(result, c);
52     }
53     return result;
54 }
55
56 UnicodeString TestUtility::hex(const uint8_t* bytes, int32_t len) {
57         UnicodeString buf;
58         for (int32_t i = 0; i < len; ++i) {
59                 buf.append(HEX[0x0F & (bytes[i] >> 4)]);
60                 buf.append(HEX[0x0F & bytes[i]]);
61         }
62         return buf;
63 }