From a9aabc6242d88a678140f1a32c87fc8a5cb2f41b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 9 Apr 2017 14:01:59 +0100 Subject: [PATCH] Add tests for the PropList API. --- src/include/ucd/ucd.h | 2 +- tests/printcdata.c | 5 ++++- tests/printucddata.c | 5 ++++- tests/printucddata_cpp.cpp | 5 ++++- tools/printdata.py | 22 ++++++++++++++++++++-- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h index 40103581..294c3386 100644 --- a/src/include/ucd/ucd.h +++ b/src/include/ucd/ucd.h @@ -335,7 +335,7 @@ typedef enum ucd_property_ UCD_PROPERTY_JOIN_CONTROL = 0x00000008, /**< @brief Join_Control */ UCD_PROPERTY_DASH = 0x00000010, /**< @brief Dash */ UCD_PROPERTY_HYPHEN = 0x00000020, /**< @brief Hyphen */ - UCD_PROPERTY_QUOTATION_MARK = 0x00000020, /**< @brief Quotation_Mark */ + UCD_PROPERTY_QUOTATION_MARK = 0x00000040, /**< @brief Quotation_Mark */ } ucd_property; /** @brief Return the properties of the specified codepoint. diff --git a/tests/printcdata.c b/tests/printcdata.c index f9af2d08..49e29a42 100644 --- a/tests/printcdata.c +++ b/tests/printcdata.c @@ -163,6 +163,9 @@ void uprintf(FILE *out, codepoint_t c, const char *format) case 'p': // codepoint uprintf_codepoint(out, c, *++format); break; + case 'P': // properties + fprintf(out, "%08x", ucd_properties(c, ucd_lookup_category(c))); + break; case 'i': // is* uprintf_is(out, c, *++format); break; @@ -249,7 +252,7 @@ int main(int argc, char **argv) { for (codepoint_t c = 0; c <= 0x10FFFF; ++c) uprintf(stdout, c, format ? format : - "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il\n"); + "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il %P\n"); } return 0; } diff --git a/tests/printucddata.c b/tests/printucddata.c index e410480c..2fb87ed8 100644 --- a/tests/printucddata.c +++ b/tests/printucddata.c @@ -160,6 +160,9 @@ void uprintf(FILE *out, codepoint_t c, const char *format) case 'p': // codepoint uprintf_codepoint(out, c, *++format); break; + case 'P': // properties + fprintf(out, "%08x", ucd_properties(c, ucd_lookup_category(c))); + break; case 'i': // is* uprintf_is(out, c, *++format); break; @@ -244,7 +247,7 @@ int main(int argc, char **argv) { for (codepoint_t c = 0; c <= 0x10FFFF; ++c) uprintf(stdout, c, format ? format : - "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il\n"); + "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il %P\n"); } return 0; } diff --git a/tests/printucddata_cpp.cpp b/tests/printucddata_cpp.cpp index 03214bae..59128c22 100644 --- a/tests/printucddata_cpp.cpp +++ b/tests/printucddata_cpp.cpp @@ -160,6 +160,9 @@ void uprintf(FILE *out, ucd::codepoint_t c, const char *format) case 'p': // codepoint uprintf_codepoint(out, c, *++format); break; + case 'P': // properties + fprintf(out, "%08x", ucd::properties(c, ucd::lookup_category(c))); + break; case 'i': // is* uprintf_is(out, c, *++format); break; @@ -244,7 +247,7 @@ int main(int argc, char **argv) { for (ucd::codepoint_t c = 0; c <= 0x10FFFF; ++c) uprintf(stdout, c, format ? format : - "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il\n"); + "%pH %s %C %c %UH %LH %TH %id %ix %ic %is %ib %ip %iP %ig %iA %ia %iu %il %P\n"); } return 0; } diff --git a/tools/printdata.py b/tools/printdata.py index bc724de5..a951e90e 100755 --- a/tools/printdata.py +++ b/tools/printdata.py @@ -113,6 +113,23 @@ def islower(data): else: return 0 +def decomposition_type(data, dtype): + value = data.get('DecompositionType', None) + if value and value.startswith(dtype): + return value + return None + +def properties(data): + props = 0 + props += 1 * data.get('White_Space', 0) + props += 2 * (decomposition_type(data, '') != None) + props += 4 * data.get('Bidi_Control', 0) + props += 8 * data.get('Join_Control', 0) + props += 16 * data.get('Dash', 0) + props += 32 * data.get('Hyphen', 0) + props += 64 * data.get('Quotation_Mark', 0) + return props + if __name__ == '__main__': for codepoint in ucd.CodeRange('000000..10FFFF'): try: @@ -126,10 +143,11 @@ if __name__ == '__main__': if title == null: title = codepoint if upper == null: upper = codepoint if lower == null: lower = codepoint - print('%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s' % ( + print('%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %08x' % ( codepoint, script, data.get('GeneralCategory', 'Cn')[0], data.get('GeneralCategory', 'Cn'), upper, lower, title, isdigit(data), isxdigit(data), iscntrl(data), isspace(data), isblank(data), ispunct(data), - isprint(data), isgraph(data), isalnum(data), isalpha(data), isupper(data), islower(data))) + isprint(data), isgraph(data), isalnum(data), isalpha(data), isupper(data), islower(data), + properties(data)))