From 294565e457f1a9756fb7e5902fec751cbe6d9691 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Mon, 13 Jun 2022 19:02:51 -0500 Subject: [PATCH] Update: Add some unit tests for f_utf. Add the structure for the remaining tests. The (currently) unused tests are just copy and pastes and may need changes. With the exception of the "valid" tests, these unit tests use statically generated data files containing bytesequences (unsigned 32-bit) in base-10 format. The base-10 format representation of the bytesequence is used for easy reading using standard libc functions. These static data files are generated using a combination of the Unicode database codepoints, a script I wrote, and the "unicode" program. The Unicode codepoints used for each generated bytesequence set are also provided. This implements the following tests: - control - digit - emoji - symbol - valid The intent of this is to test the entire spectrum of valid codepoints (except for the "valid" tests which tests every single possible value). Due to every single value being tested by "valid" tests for both f_utf_is_valid() and f_utf_character_is_valid() results in a long running test. --- level_0/f_utf/data/build/settings-tests | 14 + .../f_utf/data/tests/bytesequences/control-all.txt | 65 + .../f_utf/data/tests/bytesequences/digit-all.txt | 650 +++++++ .../f_utf/data/tests/bytesequences/emoji-all.txt | 1980 ++++++++++++++++++++ .../{symbols-all.txt => symbol-all.txt} | 0 .../f_utf/data/tests/codepoints/control-all.txt | 65 + level_0/f_utf/data/tests/codepoints/digit-all.txt | 650 +++++++ level_0/f_utf/data/tests/codepoints/emoji-all.txt | 1980 ++++++++++++++++++++ .../codepoints/{symbols-all.txt => symbol-all.txt} | 0 level_0/f_utf/tests/unit/c/data-utf.c | 79 +- level_0/f_utf/tests/unit/c/data-utf.h | 229 ++- .../unit/c/test-utf-character_is_alphabetic.c | 39 + .../unit/c/test-utf-character_is_alphabetic.h | 20 + .../tests/unit/c/test-utf-character_is_combining.c | 39 + .../tests/unit/c/test-utf-character_is_combining.h | 20 + .../tests/unit/c/test-utf-character_is_control.c | 39 + .../tests/unit/c/test-utf-character_is_control.h | 20 + .../tests/unit/c/test-utf-character_is_digit.c | 39 + .../tests/unit/c/test-utf-character_is_digit.h | 20 + .../tests/unit/c/test-utf-character_is_emoji.c | 39 + .../tests/unit/c/test-utf-character_is_emoji.h | 20 + .../tests/unit/c/test-utf-character_is_numeric.c | 39 + .../tests/unit/c/test-utf-character_is_numeric.h | 20 + .../tests/unit/c/test-utf-character_is_phonetic.c | 39 + .../tests/unit/c/test-utf-character_is_phonetic.h | 20 + .../tests/unit/c/test-utf-character_is_subscript.c | 39 + .../tests/unit/c/test-utf-character_is_subscript.h | 20 + .../unit/c/test-utf-character_is_superscript.c | 39 + .../unit/c/test-utf-character_is_superscript.h | 20 + .../tests/unit/c/test-utf-character_is_surrogate.c | 39 + .../tests/unit/c/test-utf-character_is_surrogate.h | 20 + .../tests/unit/c/test-utf-character_is_symbol.c | 2 +- .../tests/unit/c/test-utf-character_is_valid.c | 69 + .../tests/unit/c/test-utf-character_is_valid.h | 20 + .../unit/c/test-utf-character_is_whitespace.c | 39 + .../unit/c/test-utf-character_is_whitespace.h | 20 + .../tests/unit/c/test-utf-character_is_wide.c | 39 + .../tests/unit/c/test-utf-character_is_wide.h | 20 + .../tests/unit/c/test-utf-character_is_word.c | 69 + .../tests/unit/c/test-utf-character_is_word.h | 27 + .../unit/c/test-utf-character_is_zero_width.c | 39 + .../unit/c/test-utf-character_is_zero_width.h | 20 + .../f_utf/tests/unit/c/test-utf-is_alphabetic.c | 56 + .../f_utf/tests/unit/c/test-utf-is_alphabetic.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_combining.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_combining.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_control.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_control.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_digit.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_digit.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_emoji.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_emoji.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_numeric.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_numeric.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_phonetic.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_phonetic.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_subscript.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_subscript.h | 20 + .../f_utf/tests/unit/c/test-utf-is_superscript.c | 56 + .../f_utf/tests/unit/c/test-utf-is_superscript.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_surrogate.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_surrogate.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_symbol.c | 2 +- level_0/f_utf/tests/unit/c/test-utf-is_valid.c | 72 + level_0/f_utf/tests/unit/c/test-utf-is_valid.h | 20 + .../f_utf/tests/unit/c/test-utf-is_whitespace.c | 56 + .../f_utf/tests/unit/c/test-utf-is_whitespace.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_wide.c | 56 + level_0/f_utf/tests/unit/c/test-utf-is_wide.h | 20 + level_0/f_utf/tests/unit/c/test-utf-is_word.c | 103 + level_0/f_utf/tests/unit/c/test-utf-is_word.h | 27 + .../f_utf/tests/unit/c/test-utf-is_zero_width.c | 56 + .../f_utf/tests/unit/c/test-utf-is_zero_width.h | 20 + level_0/f_utf/tests/unit/c/test-utf.c | 32 + level_0/f_utf/tests/unit/c/test-utf.h | 30 + 75 files changed, 7934 insertions(+), 6 deletions(-) create mode 100644 level_0/f_utf/data/tests/bytesequences/control-all.txt create mode 100644 level_0/f_utf/data/tests/bytesequences/digit-all.txt create mode 100644 level_0/f_utf/data/tests/bytesequences/emoji-all.txt rename level_0/f_utf/data/tests/bytesequences/{symbols-all.txt => symbol-all.txt} (100%) create mode 100644 level_0/f_utf/data/tests/codepoints/control-all.txt create mode 100644 level_0/f_utf/data/tests/codepoints/digit-all.txt create mode 100644 level_0/f_utf/data/tests/codepoints/emoji-all.txt rename level_0/f_utf/data/tests/codepoints/{symbols-all.txt => symbol-all.txt} (100%) create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_combining.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_combining.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_control.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_control.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_digit.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_digit.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_valid.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_valid.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_wide.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_wide.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_word.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_word.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_combining.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_combining.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_control.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_control.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_digit.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_digit.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_emoji.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_emoji.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_numeric.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_numeric.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_phonetic.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_phonetic.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_subscript.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_subscript.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_superscript.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_superscript.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_surrogate.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_surrogate.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_valid.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_valid.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_whitespace.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_whitespace.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_wide.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_wide.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_word.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_word.h create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_zero_width.c create mode 100644 level_0/f_utf/tests/unit/c/test-utf-is_zero_width.h diff --git a/level_0/f_utf/data/build/settings-tests b/level_0/f_utf/data/build/settings-tests index 196e3cb..c4da7c7 100644 --- a/level_0/f_utf/data/build/settings-tests +++ b/level_0/f_utf/data/build/settings-tests @@ -26,9 +26,23 @@ build_libraries -lc -lcmocka build_libraries-individual -lf_memory -lf_string -lf_utf build_sources_program test-utf-append.c test-utf-append_assure.c test-utf-append_assure_nulless.c test-utf-append_nulless.c +build_sources_program test-utf-character_is_alphabetic.c test-utf-is_alphabetic.c +build_sources_program test-utf-character_is_combining.c test-utf-is_combining.c +build_sources_program test-utf-character_is_control.c test-utf-is_control.c +build_sources_program test-utf-character_is_digit.c test-utf-is_digit.c +build_sources_program test-utf-character_is_emoji.c test-utf-is_emoji.c +build_sources_program test-utf-character_is_numeric.c test-utf-is_numeric.c build_sources_program test-utf-character_is_private.c test-utf-is_private.c build_sources_program test-utf-character_is_punctuation.c test-utf-is_punctuation.c +build_sources_program test-utf-character_is_subscript.c test-utf-is_subscript.c +build_sources_program test-utf-character_is_superscript.c test-utf-is_superscript.c +build_sources_program test-utf-character_is_surrogate.c test-utf-is_surrogate.c build_sources_program test-utf-character_is_symbol.c test-utf-is_symbol.c +build_sources_program test-utf-character_is_valid.c test-utf-is_valid.c +build_sources_program test-utf-character_is_whitespace.c test-utf-is_whitespace.c +build_sources_program test-utf-character_is_wide.c test-utf-is_wide.c +build_sources_program test-utf-character_is_word.c test-utf-is_word.c +build_sources_program test-utf-character_is_zero_width.c test-utf-is_zero_width.c build_sources_program test-utf-dynamic_adjust.c test-utf-dynamic_append.c test-utf-dynamic_append_assure.c test-utf-dynamic_append_assure_nulless.c test-utf-dynamic_append_nulless.c build_sources_program test-utf-dynamic_decimate_by.c test-utf-dynamic_decrease_by.c test-utf-dynamic_increase.c test-utf-dynamic_increase_by.c build_sources_program test-utf-dynamic_mash.c test-utf-dynamic_mash_nulless.c diff --git a/level_0/f_utf/data/tests/bytesequences/control-all.txt b/level_0/f_utf/data/tests/bytesequences/control-all.txt new file mode 100644 index 0000000..4b9f4da --- /dev/null +++ b/level_0/f_utf/data/tests/bytesequences/control-all.txt @@ -0,0 +1,65 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +127 +49792 +49793 +49794 +49795 +49796 +49797 +49798 +49799 +49800 +49801 +49802 +49803 +49804 +49805 +49806 +49807 +49808 +49809 +49810 +49811 +49812 +49813 +49814 +49815 +49816 +49817 +49818 +49819 +49820 +49821 +49822 +49823 diff --git a/level_0/f_utf/data/tests/bytesequences/digit-all.txt b/level_0/f_utf/data/tests/bytesequences/digit-all.txt new file mode 100644 index 0000000..9bcbc2f --- /dev/null +++ b/level_0/f_utf/data/tests/bytesequences/digit-all.txt @@ -0,0 +1,650 @@ +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +55712 +55713 +55714 +55715 +55716 +55717 +55718 +55719 +55720 +55721 +56240 +56241 +56242 +56243 +56244 +56245 +56246 +56247 +56248 +56249 +57216 +57217 +57218 +57219 +57220 +57221 +57222 +57223 +57224 +57225 +14722470 +14722471 +14722472 +14722473 +14722474 +14722475 +14722476 +14722477 +14722478 +14722479 +14722982 +14722983 +14722984 +14722985 +14722986 +14722987 +14722988 +14722989 +14722990 +14722991 +14723494 +14723495 +14723496 +14723497 +14723498 +14723499 +14723500 +14723501 +14723502 +14723503 +14724006 +14724007 +14724008 +14724009 +14724010 +14724011 +14724012 +14724013 +14724014 +14724015 +14724518 +14724519 +14724520 +14724521 +14724522 +14724523 +14724524 +14724525 +14724526 +14724527 +14725030 +14725031 +14725032 +14725033 +14725034 +14725035 +14725036 +14725037 +14725038 +14725039 +14725542 +14725543 +14725544 +14725545 +14725546 +14725547 +14725548 +14725549 +14725550 +14725551 +14726054 +14726055 +14726056 +14726057 +14726058 +14726059 +14726060 +14726061 +14726062 +14726063 +14726566 +14726567 +14726568 +14726569 +14726570 +14726571 +14726572 +14726573 +14726574 +14726575 +14727078 +14727079 +14727080 +14727081 +14727082 +14727083 +14727084 +14727085 +14727086 +14727087 +14727568 +14727569 +14727570 +14727571 +14727572 +14727573 +14727574 +14727575 +14727576 +14727577 +14728080 +14728081 +14728082 +14728083 +14728084 +14728085 +14728086 +14728087 +14728088 +14728089 +14728352 +14728353 +14728354 +14728355 +14728356 +14728357 +14728358 +14728359 +14728360 +14728361 +14778752 +14778753 +14778754 +14778755 +14778756 +14778757 +14778758 +14778759 +14778760 +14778761 +4036006560 +4036006561 +4036006562 +4036006563 +4036006564 +4036006565 +4036006566 +4036006567 +4036006568 +4036006569 +14779024 +14779025 +14779026 +14779027 +14779028 +14779029 +14779030 +14779031 +14779032 +14779033 +4036015280 +4036015281 +4036015282 +4036015283 +4036015284 +4036015285 +4036015286 +4036015287 +4036015288 +4036015289 +4036067750 +4036067751 +4036067752 +4036067753 +4036067754 +4036067755 +4036067756 +4036067757 +4036067758 +4036067759 +4036068272 +4036068273 +4036068274 +4036068275 +4036068276 +4036068277 +4036068278 +4036068279 +4036068280 +4036068281 +4036068534 +4036068535 +4036068536 +4036068537 +4036068538 +4036068539 +4036068540 +4036068541 +4036068542 +4036068543 +4036069264 +4036069265 +4036069266 +4036069267 +4036069268 +4036069269 +4036069270 +4036069271 +4036069272 +4036069273 +4036070320 +4036070321 +4036070322 +4036070323 +4036070324 +4036070325 +4036070326 +4036070327 +4036070328 +4036070329 +4036071824 +4036071825 +4036071826 +4036071827 +4036071828 +4036071829 +4036071830 +4036071831 +4036071832 +4036071833 +4036072336 +4036072337 +4036072338 +4036072339 +4036072340 +4036072341 +4036072342 +4036072343 +4036072344 +4036072345 +4036073872 +4036073873 +4036073874 +4036073875 +4036073876 +4036073877 +4036073878 +4036073879 +4036073880 +4036073881 +4036074368 +4036074369 +4036074370 +4036074371 +4036074372 +4036074373 +4036074374 +4036074375 +4036074376 +4036074377 +4036074672 +4036074673 +4036074674 +4036074675 +4036074676 +4036074677 +4036074678 +4036074679 +4036074680 +4036074681 +4036076448 +4036076449 +4036076450 +4036076451 +4036076452 +4036076453 +4036076454 +4036076455 +4036076456 +4036076457 +4036076944 +4036076945 +4036076946 +4036076947 +4036076948 +4036076949 +4036076950 +4036076951 +4036076952 +4036076953 +4036080016 +4036080017 +4036080018 +4036080019 +4036080020 +4036080021 +4036080022 +4036080023 +4036080024 +4036080025 +4036081040 +4036081041 +4036081042 +4036081043 +4036081044 +4036081045 +4036081046 +4036081047 +4036081048 +4036081049 +4036081312 +4036081313 +4036081314 +4036081315 +4036081316 +4036081317 +4036081318 +4036081319 +4036081320 +4036081321 +4036405664 +4036405665 +4036405666 +4036405667 +4036405668 +4036405669 +4036405670 +4036405671 +4036405672 +4036405673 +4036406672 +4036406673 +4036406674 +4036406675 +4036406676 +4036406677 +4036406678 +4036406679 +4036406680 +4036406681 +14786464 +14786465 +14786466 +14786467 +14786468 +14786469 +14786470 +14786471 +14786472 +14786473 +14786704 +14786705 +14786706 +14786707 +14786708 +14786709 +14786710 +14786711 +14786712 +14786713 +14787974 +14787975 +14787976 +14787977 +14787978 +14787979 +14787980 +14787981 +14787982 +14787983 +14788496 +14788497 +14788498 +14788499 +14788500 +14788501 +14788502 +14788503 +14788504 +14788505 +14789248 +14789249 +14789250 +14789251 +14789252 +14789253 +14789254 +14789255 +14789256 +14789257 +14789264 +14789265 +14789266 +14789267 +14789268 +14789269 +14789270 +14789271 +14789272 +14789273 +14790032 +14790033 +14790034 +14790035 +14790036 +14790037 +14790038 +14790039 +14790040 +14790041 +14790320 +14790321 +14790322 +14790323 +14790324 +14790325 +14790326 +14790327 +14790328 +14790329 +14791040 +14791041 +14791042 +14791043 +14791044 +14791045 +14791046 +14791047 +14791048 +14791049 +14791056 +14791057 +14791058 +14791059 +14791060 +14791061 +14791062 +14791063 +14791064 +14791065 +4036861838 +4036861839 +4036861840 +4036861841 +4036861842 +4036861843 +4036861844 +4036861845 +4036861846 +4036861847 +4036861848 +4036861849 +4036861850 +4036861851 +4036861852 +4036861853 +4036861854 +4036861855 +4036861856 +4036861857 +4036861858 +4036861859 +4036861860 +4036861861 +4036861862 +4036861863 +4036861864 +4036861865 +4036861866 +4036861867 +4036861868 +4036861869 +4036861870 +4036861871 +4036861872 +4036861873 +4036861874 +4036861875 +4036861876 +4036861877 +4036861878 +4036861879 +4036861880 +4036861881 +4036861882 +4036861883 +4036861884 +4036861885 +4036861886 +4036861887 +4036920704 +4036920705 +4036920706 +4036920707 +4036920708 +4036920709 +4036920710 +4036920711 +4036920712 +4036920713 +4036922288 +4036922289 +4036922290 +4036922291 +4036922292 +4036922293 +4036922294 +4036922295 +4036922296 +4036922297 +4036928912 +4036928913 +4036928914 +4036928915 +4036928916 +4036928917 +4036928918 +4036928919 +4036928920 +4036928921 +4036997040 +4036997041 +4036997042 +4036997043 +4036997044 +4036997045 +4036997046 +4036997047 +4036997048 +4036997049 +15374496 +15374497 +15374498 +15374499 +15374500 +15374501 +15374502 +15374503 +15374504 +15374505 +15377296 +15377297 +15377298 +15377299 +15377300 +15377301 +15377302 +15377303 +15377304 +15377305 +15377536 +15377537 +15377538 +15377539 +15377540 +15377541 +15377542 +15377543 +15377544 +15377545 +15378320 +15378321 +15378322 +15378323 +15378324 +15378325 +15378326 +15378327 +15378328 +15378329 +15378352 +15378353 +15378354 +15378355 +15378356 +15378357 +15378358 +15378359 +15378360 +15378361 +15378832 +15378833 +15378834 +15378835 +15378836 +15378837 +15378838 +15378839 +15378840 +15378841 +15380400 +15380401 +15380402 +15380403 +15380404 +15380405 +15380406 +15380407 +15380408 +15380409 +15711376 +15711377 +15711378 +15711379 +15711380 +15711381 +15711382 +15711383 +15711384 +15711385 diff --git a/level_0/f_utf/data/tests/bytesequences/emoji-all.txt b/level_0/f_utf/data/tests/bytesequences/emoji-all.txt new file mode 100644 index 0000000..51137ee --- /dev/null +++ b/level_0/f_utf/data/tests/bytesequences/emoji-all.txt @@ -0,0 +1,1980 @@ +49833 +49838 +4036984964 +4036985743 +4036986288 +4036986289 +4036986302 +4036986303 +4036986510 +4036986513 +4036986514 +4036986515 +4036986516 +4036986517 +4036986518 +4036986519 +4036986520 +4036986521 +4036986522 +4036986790 +4036986791 +4036986792 +4036986793 +4036986794 +4036986795 +4036986796 +4036986797 +4036986798 +4036986799 +4036987009 +4036987010 +4036987034 +4036987055 +4036987058 +4036987059 +4036987060 +4036987061 +4036987062 +4036987063 +4036987064 +4036987065 +4036987066 +4036987280 +4036987281 +4036988032 +4036988033 +4036988034 +4036988035 +4036988036 +4036988037 +4036988038 +4036988039 +4036988040 +4036988041 +4036988042 +4036988043 +4036988044 +4036988045 +4036988046 +4036988047 +4036988048 +4036988049 +4036988050 +4036988051 +4036988052 +4036988053 +4036988054 +4036988055 +4036988056 +4036988057 +4036988058 +4036988059 +4036988060 +4036988061 +4036988062 +4036988063 +4036988064 +4036988065 +4036988066 +4036988067 +4036988068 +4036988069 +4036988070 +4036988071 +4036988072 +4036988073 +4036988074 +4036988075 +4036988076 +4036988077 +4036988078 +4036988079 +4036988080 +4036988081 +4036988082 +4036988083 +4036988084 +4036988085 +4036988086 +4036988087 +4036988088 +4036988089 +4036988090 +4036988091 +4036988092 +4036988093 +4036988094 +4036988095 +4036988288 +4036988289 +4036988290 +4036988291 +4036988292 +4036988293 +4036988294 +4036988295 +4036988296 +4036988297 +4036988298 +4036988299 +4036988300 +4036988301 +4036988302 +4036988303 +4036988304 +4036988305 +4036988306 +4036988307 +4036988308 +4036988309 +4036988310 +4036988311 +4036988312 +4036988313 +4036988314 +4036988315 +4036988316 +4036988317 +4036988318 +4036988319 +4036988320 +4036988321 +4036988322 +4036988323 +4036988324 +4036988325 +4036988326 +4036988327 +4036988328 +4036988329 +4036988330 +4036988331 +4036988332 +4036988333 +4036988334 +4036988335 +4036988336 +4036988337 +4036988338 +4036988339 +4036988340 +4036988341 +4036988342 +4036988343 +4036988344 +4036988345 +4036988346 +4036988347 +4036988348 +4036988349 +4036988350 +4036988351 +4036988544 +4036988545 +4036988546 +4036988547 +4036988548 +4036988549 +4036988550 +4036988551 +4036988552 +4036988553 +4036988554 +4036988555 +4036988556 +4036988557 +4036988558 +4036988559 +4036988560 +4036988561 +4036988562 +4036988563 +4036988564 +4036988565 +4036988566 +4036988567 +4036988568 +4036988569 +4036988570 +4036988571 +4036988572 +4036988573 +4036988574 +4036988575 +4036988576 +4036988577 +4036988578 +4036988579 +4036988580 +4036988581 +4036988582 +4036988583 +4036988584 +4036988585 +4036988586 +4036988587 +4036988588 +4036988589 +4036988590 +4036988591 +4036988592 +4036988593 +4036988594 +4036988595 +4036988596 +4036988597 +4036988598 +4036988599 +4036988600 +4036988601 +4036988602 +4036988603 +4036988604 +4036988605 +4036988606 +4036988607 +4036988800 +4036988801 +4036988802 +4036988803 +4036988804 +4036988805 +4036988806 +4036988807 +4036988808 +4036988809 +4036988810 +4036988811 +4036988812 +4036988813 +4036988814 +4036988815 +4036988816 +4036988817 +4036988818 +4036988819 +4036988820 +4036988821 +4036988822 +4036988823 +4036988824 +4036988825 +4036988826 +4036988827 +4036988828 +4036988829 +4036988830 +4036988831 +4036988832 +4036988833 +4036988834 +4036988835 +4036988836 +4036988837 +4036988838 +4036988839 +4036988840 +4036988841 +4036988842 +4036988843 +4036988844 +4036988845 +4036988846 +4036988847 +4036988848 +4036988849 +4036988850 +4036988851 +4036988852 +4036988853 +4036988854 +4036988855 +4036988856 +4036988857 +4036988858 +4036988859 +4036988860 +4036988861 +4036988862 +4036988863 +4036989056 +4036989057 +4036989058 +4036989059 +4036989060 +4036989061 +4036989062 +4036989063 +4036989064 +4036989065 +4036989066 +4036989067 +4036989068 +4036989069 +4036989070 +4036989071 +4036989072 +4036989073 +4036989074 +4036989075 +4036989076 +4036989077 +4036989078 +4036989079 +4036989080 +4036989081 +4036989082 +4036989083 +4036989084 +4036989085 +4036989086 +4036989087 +4036989088 +4036989089 +4036989090 +4036989091 +4036989092 +4036989093 +4036989094 +4036989095 +4036989096 +4036989097 +4036989098 +4036989099 +4036989100 +4036989101 +4036989102 +4036989103 +4036989104 +4036989105 +4036989106 +4036989107 +4036989108 +4036989109 +4036989110 +4036989111 +4036989112 +4036989113 +4036989114 +4036989115 +4036989116 +4036989117 +4036989118 +4036989119 +4036989312 +4036989313 +4036989314 +4036989315 +4036989316 +4036989317 +4036989318 +4036989319 +4036989320 +4036989321 +4036989322 +4036989323 +4036989324 +4036989325 +4036989326 +4036989327 +4036989328 +4036989329 +4036989330 +4036989331 +4036989332 +4036989333 +4036989334 +4036989335 +4036989336 +4036989337 +4036989338 +4036989339 +4036989340 +4036989341 +4036989342 +4036989343 +4036989344 +4036989345 +4036989346 +4036989347 +4036989348 +4036989349 +4036989350 +4036989351 +4036989352 +4036989353 +4036989354 +4036989355 +4036989356 +4036989357 +4036989358 +4036989359 +4036989360 +4036989361 +4036989362 +4036989363 +4036989364 +4036989365 +4036989366 +4036989367 +4036989368 +4036989369 +4036989370 +4036989371 +4036989372 +4036989373 +4036989374 +4036989375 +4036989568 +4036989569 +4036989570 +4036989571 +4036989572 +4036989573 +4036989574 +4036989575 +4036989576 +4036989577 +4036989578 +4036989579 +4036989580 +4036989581 +4036989582 +4036989583 +4036989584 +4036989585 +4036989586 +4036989587 +4036989588 +4036989589 +4036989590 +4036989591 +4036989592 +4036989593 +4036989594 +4036989595 +4036989596 +4036989597 +4036989598 +4036989599 +4036989600 +4036989601 +4036989602 +4036989603 +4036989604 +4036989605 +4036989606 +4036989607 +4036989608 +4036989609 +4036989610 +4036989611 +4036989612 +4036989613 +4036989614 +4036989615 +4036989616 +4036989617 +4036989618 +4036989619 +4036989620 +4036989621 +4036989622 +4036989623 +4036989624 +4036989625 +4036989626 +4036989627 +4036989628 +4036989629 +4036989630 +4036989631 +4036989824 +4036989825 +4036989826 +4036989827 +4036989828 +4036989829 +4036989830 +4036989831 +4036989832 +4036989833 +4036989834 +4036989835 +4036989836 +4036989837 +4036989838 +4036989839 +4036989840 +4036989841 +4036989842 +4036989843 +4036989844 +4036989845 +4036989846 +4036989847 +4036989848 +4036989849 +4036989850 +4036989851 +4036989852 +4036989853 +4036989854 +4036989855 +4036989856 +4036989857 +4036989858 +4036989859 +4036989860 +4036989861 +4036989862 +4036989863 +4036989864 +4036989865 +4036989866 +4036989867 +4036989868 +4036989869 +4036989870 +4036989871 +4036989872 +4036989873 +4036989874 +4036989875 +4036989876 +4036989877 +4036989878 +4036989879 +4036989880 +4036989881 +4036989882 +4036989883 +4036989884 +4036989885 +4036989886 +4036989887 +4036990080 +4036990081 +4036990082 +4036990083 +4036990084 +4036990085 +4036990086 +4036990087 +4036990088 +4036990089 +4036990090 +4036990091 +4036990092 +4036990093 +4036990094 +4036990095 +4036990096 +4036990097 +4036990098 +4036990099 +4036990100 +4036990101 +4036990102 +4036990103 +4036990104 +4036990105 +4036990106 +4036990107 +4036990108 +4036990109 +4036990110 +4036990111 +4036990112 +4036990113 +4036990114 +4036990115 +4036990116 +4036990117 +4036990118 +4036990119 +4036990120 +4036990121 +4036990122 +4036990123 +4036990124 +4036990125 +4036990126 +4036990127 +4036990128 +4036990129 +4036990130 +4036990131 +4036990132 +4036990133 +4036990134 +4036990135 +4036990136 +4036990137 +4036990138 +4036990139 +4036990140 +4036990141 +4036990142 +4036990143 +4036990336 +4036990337 +4036990338 +4036990339 +4036990340 +4036990341 +4036990342 +4036990343 +4036990344 +4036990345 +4036990346 +4036990347 +4036990348 +4036990349 +4036990350 +4036990351 +4036990352 +4036990353 +4036990354 +4036990355 +4036990356 +4036990357 +4036990358 +4036990359 +4036990360 +4036990361 +4036990362 +4036990363 +4036990364 +4036990365 +4036990366 +4036990367 +4036990368 +4036990369 +4036990370 +4036990371 +4036990372 +4036990373 +4036990374 +4036990375 +4036990376 +4036990377 +4036990378 +4036990379 +4036990380 +4036990381 +4036990382 +4036990383 +4036990384 +4036990385 +4036990386 +4036990387 +4036990388 +4036990389 +4036990390 +4036990391 +4036990392 +4036990393 +4036990394 +4036990395 +4036990396 +4036990397 +4036990398 +4036990399 +4036990592 +4036990593 +4036990594 +4036990595 +4036990596 +4036990597 +4036990598 +4036990599 +4036990600 +4036990601 +4036990602 +4036990603 +4036990604 +4036990605 +4036990606 +4036990607 +4036990608 +4036990609 +4036990610 +4036990611 +4036990612 +4036990613 +4036990614 +4036990615 +4036990616 +4036990617 +4036990618 +4036990619 +4036990620 +4036990621 +4036990622 +4036990623 +4036990624 +4036990625 +4036990626 +4036990627 +4036990628 +4036990629 +4036990630 +4036990631 +4036990632 +4036990633 +4036990634 +4036990635 +4036990636 +4036990637 +4036990638 +4036990639 +4036990640 +4036990641 +4036990642 +4036990643 +4036990644 +4036990645 +4036990646 +4036990647 +4036990648 +4036990649 +4036990650 +4036990651 +4036990652 +4036990653 +4036990654 +4036990655 +4036990848 +4036990849 +4036990850 +4036990851 +4036990852 +4036990853 +4036990854 +4036990855 +4036990856 +4036990857 +4036990858 +4036990859 +4036990860 +4036990861 +4036990862 +4036990863 +4036990864 +4036990865 +4036990866 +4036990867 +4036990868 +4036990869 +4036990870 +4036990871 +4036990872 +4036990873 +4036990874 +4036990875 +4036990876 +4036990877 +4036990878 +4036990879 +4036990880 +4036990881 +4036990882 +4036990883 +4036990884 +4036990885 +4036990886 +4036990887 +4036990888 +4036990889 +4036990890 +4036990891 +4036990892 +4036990893 +4036990894 +4036990895 +4036990896 +4036990897 +4036990898 +4036990899 +4036990900 +4036990901 +4036990902 +4036990903 +4036990904 +4036990905 +4036990906 +4036990907 +4036990908 +4036990909 +4036990910 +4036990911 +4036991104 +4036991105 +4036991106 +4036991107 +4036991108 +4036991109 +4036991110 +4036991111 +4036991112 +4036991113 +4036991114 +4036991115 +4036991116 +4036991117 +4036991118 +4036991119 +4036991120 +4036991121 +4036991122 +4036991123 +4036991124 +4036991125 +4036991126 +4036991127 +4036991128 +4036991129 +4036991130 +4036991131 +4036991132 +4036991133 +4036991134 +4036991135 +4036991136 +4036991137 +4036991138 +4036991139 +4036991140 +4036991141 +4036991142 +4036991143 +4036991144 +4036991145 +4036991146 +4036991147 +4036991148 +4036991149 +4036991150 +4036991151 +4036991152 +4036991153 +4036991154 +4036991155 +4036991156 +4036991157 +4036991158 +4036991159 +4036991160 +4036991161 +4036991162 +4036991163 +4036991164 +4036991165 +4036991166 +4036991167 +4036991360 +4036991361 +4036991362 +4036991363 +4036991364 +4036991365 +4036991366 +4036991367 +4036991368 +4036991369 +4036991370 +4036991371 +4036991372 +4036991373 +4036991374 +4036991375 +4036991616 +4036991617 +4036991618 +4036991619 +4036991620 +4036991621 +4036991622 +4036991623 +4036991624 +4036991625 +4036991626 +4036991627 +4036991628 +4036991629 +4036991630 +4036991631 +4036991632 +4036991633 +4036991634 +4036991635 +4036991636 +4036991637 +4036991638 +4036991639 +4036991640 +4036991641 +4036991642 +4036991643 +4036991644 +4036991645 +4036991646 +4036991647 +4036991648 +4036991649 +4036991650 +4036991651 +4036991652 +4036991653 +4036991654 +4036991655 +4036991656 +4036991657 +4036991658 +4036991659 +4036991660 +4036991661 +4036991662 +4036991663 +4036991664 +4036991665 +4036991666 +4036991667 +4036991668 +4036991669 +4036991670 +4036991671 +4036991672 +4036991673 +4036991674 +4036991675 +4036991676 +4036991677 +4036991678 +4036991679 +4036991872 +4036991873 +4036991874 +4036991875 +4036991876 +4036991877 +4036991878 +4036991879 +4036991880 +4036991881 +4036991882 +4036991883 +4036991884 +4036991885 +4036991886 +4036991887 +4036991888 +4036991889 +4036991890 +4036991891 +4036991892 +4036991893 +4036991894 +4036991895 +4036991896 +4036991897 +4036991898 +4036991899 +4036991900 +4036991901 +4036991902 +4036991903 +4036991904 +4036991905 +4036991906 +4036991907 +4036991908 +4036991909 +4036991910 +4036991911 +4036991912 +4036991913 +4036991914 +4036991915 +4036991916 +4036991917 +4036991918 +4036991919 +4036991920 +4036991921 +4036991922 +4036991923 +4036991924 +4036991925 +4036991926 +4036991927 +4036991928 +4036991929 +4036991930 +4036991931 +4036991932 +4036991933 +4036991934 +4036991935 +4036992928 +4036992929 +4036992930 +4036992931 +4036992932 +4036992933 +4036992934 +4036992935 +4036992936 +4036992937 +4036992938 +4036992939 +4036992944 +4036994176 +4036994177 +4036994178 +4036994179 +4036994180 +4036994181 +4036994182 +4036994183 +4036994184 +4036994185 +4036994186 +4036994187 +4036994188 +4036994189 +4036994190 +4036994191 +4036994192 +4036994193 +4036994194 +4036994195 +4036994196 +4036994197 +4036994198 +4036994199 +4036994200 +4036994201 +4036994202 +4036994203 +4036994204 +4036994205 +4036994206 +4036994207 +4036994208 +4036994209 +4036994210 +4036994211 +4036994212 +4036994213 +4036994214 +4036994215 +4036994216 +4036994217 +4036994218 +4036994219 +4036994220 +4036994221 +4036994222 +4036994223 +4036994224 +4036994225 +4036994226 +4036994227 +4036994228 +4036994229 +4036994230 +4036994231 +4036994232 +4036994233 +4036994234 +4036994235 +4036994236 +4036994237 +4036994238 +4036994239 +4036994432 +4036994433 +4036994434 +4036994435 +4036994436 +4036994437 +4036994438 +4036994439 +4036994440 +4036994441 +4036994442 +4036994443 +4036994444 +4036994445 +4036994446 +4036994447 +4036994448 +4036994449 +4036994450 +4036994451 +4036994452 +4036994453 +4036994454 +4036994455 +4036994456 +4036994457 +4036994458 +4036994459 +4036994460 +4036994461 +4036994462 +4036994463 +4036994464 +4036994465 +4036994466 +4036994467 +4036994468 +4036994469 +4036994470 +4036994471 +4036994472 +4036994473 +4036994474 +4036994475 +4036994476 +4036994477 +4036994478 +4036994479 +4036994480 +4036994481 +4036994482 +4036994483 +4036994484 +4036994485 +4036994486 +4036994487 +4036994488 +4036994489 +4036994490 +4036994491 +4036994492 +4036994493 +4036994494 +4036994495 +4036994688 +4036994689 +4036994690 +4036994691 +4036994692 +4036994693 +4036994694 +4036994695 +4036994696 +4036994697 +4036994698 +4036994699 +4036994700 +4036994701 +4036994702 +4036994703 +4036994704 +4036994705 +4036994706 +4036994707 +4036994708 +4036994709 +4036994710 +4036994711 +4036994712 +4036994713 +4036994714 +4036994715 +4036994716 +4036994717 +4036994718 +4036994719 +4036994720 +4036994721 +4036994722 +4036994723 +4036994724 +4036994725 +4036994726 +4036994727 +4036994728 +4036994729 +4036994730 +4036994731 +4036994732 +4036994733 +4036994734 +4036994735 +4036994736 +4036994737 +4036994738 +4036994739 +4036994740 +4036994741 +4036994742 +4036994743 +4036994744 +4036994745 +4036994746 +4036994747 +4036994748 +4036994749 +4036994750 +4036994751 +4036994944 +4036994945 +4036994946 +4036994947 +4036994948 +4036994949 +4036994950 +4036994951 +4036994952 +4036994953 +4036994954 +4036994955 +4036994956 +4036994957 +4036994958 +4036994959 +4036994960 +4036994961 +4036994962 +4036994963 +4036994964 +4036994965 +4036994966 +4036994967 +4036994968 +4036994969 +4036994970 +4036994971 +4036994972 +4036994973 +4036994974 +4036994975 +4036994976 +4036994977 +4036994978 +4036994979 +4036994980 +4036994981 +4036994982 +4036994983 +4036994984 +4036994985 +4036994986 +4036994987 +4036994988 +4036994989 +4036994990 +4036994991 +4036994992 +4036994993 +4036994994 +4036994995 +4036994996 +4036994997 +4036994998 +4036994999 +4036995000 +4036995001 +4036995002 +4036995003 +4036995004 +4036995005 +4036995006 +4036995007 +4036995504 +4036995505 +4036995506 +4036995507 +4036995508 +4036995512 +4036995513 +4036995514 +4036995515 +4036995516 +4036995712 +4036995713 +4036995714 +4036995715 +4036995716 +4036995717 +4036995718 +4036995728 +4036995729 +4036995730 +4036995731 +4036995732 +4036995733 +4036995734 +4036995735 +4036995736 +4036995737 +4036995738 +4036995739 +4036995740 +4036995741 +4036995742 +4036995743 +4036995744 +4036995745 +4036995746 +4036995747 +4036995748 +4036995749 +4036995750 +4036995751 +4036995752 +4036995753 +4036995754 +4036995755 +4036995756 +4036995760 +4036995761 +4036995762 +4036995763 +4036995764 +4036995765 +4036995766 +4036995767 +4036995768 +4036995769 +4036995770 +4036995968 +4036995969 +4036995970 +4036995971 +4036995972 +4036995973 +4036995984 +4036995985 +4036995986 +4036995987 +4036995988 +4036995989 +4036995990 +4036995991 +4036995992 +4036995993 +4036996000 +4036996001 +4036996002 +4036996003 +4036996004 +4036996005 +4036996006 +4036996007 +4036996016 +4036996017 +4036996018 +4036996019 +4036996020 +4036996021 +4036996022 +14844296 +14844297 +14845090 +14845113 +14845584 +14845585 +14845586 +14845587 +14845588 +14845589 +14845590 +14845591 +14845592 +14845593 +14845594 +14845595 +14845596 +14845597 +14845598 +14845599 +14845600 +14845601 +14845602 +14845603 +14845604 +14845605 +14845606 +14845607 +14845608 +14845609 +14845610 +14845611 +14845612 +14845613 +14845614 +14845615 +14845616 +14845617 +14845618 +14845619 +14845620 +14845621 +14845622 +14845623 +14845624 +14845625 +14845626 +14845627 +14845628 +14845629 +14845630 +14845631 +14845824 +14845825 +14845826 +14845827 +14845828 +14845829 +14845830 +14845831 +14845832 +14845833 +14845834 +14845835 +14845836 +14845837 +14845838 +14845839 +14845840 +14845841 +14845842 +14845843 +14845844 +14845845 +14845846 +14845847 +14845848 +14845849 +14845850 +14845851 +14845852 +14845853 +14845854 +14845855 +14845856 +14845857 +14845858 +14845859 +14845860 +14845861 +14845862 +14845863 +14845864 +14845865 +14845866 +14845867 +14845868 +14845869 +14845870 +14845871 +14845872 +14845873 +14845874 +14845875 +14845876 +14845877 +14845878 +14845879 +14845880 +14845881 +14845882 +14845883 +14845884 +14845885 +14845886 +14845887 +14847130 +14847131 +14847144 +14847887 +14847913 +14847914 +14847915 +14847916 +14847917 +14847918 +14847919 +14847920 +14847921 +14847922 +14847923 +14847928 +14847929 +14847930 +14849706 +14849707 +14849718 +14849920 +14849979 +14849980 +14849981 +14849982 +14850176 +14850177 +14850178 +14850179 +14850180 +14850181 +14850182 +14850183 +14850184 +14850185 +14850186 +14850187 +14850188 +14850189 +14850190 +14850191 +14850192 +14850193 +14850194 +14850195 +14850196 +14850197 +14850198 +14850199 +14850200 +14850201 +14850202 +14850203 +14850204 +14850205 +14850206 +14850207 +14850208 +14850209 +14850210 +14850211 +14850212 +14850213 +14850214 +14850215 +14850216 +14850217 +14850218 +14850219 +14850220 +14850221 +14850222 +14850223 +14850224 +14850225 +14850226 +14850227 +14850228 +14850229 +14850230 +14850231 +14850232 +14850233 +14850234 +14850235 +14850236 +14850237 +14850238 +14850239 +14850432 +14850433 +14850434 +14850435 +14850436 +14850437 +14850438 +14850439 +14850440 +14850441 +14850442 +14850443 +14850444 +14850445 +14850446 +14850447 +14850448 +14850449 +14850450 +14850451 +14850452 +14850453 +14850454 +14850455 +14850456 +14850457 +14850458 +14850459 +14850460 +14850461 +14850462 +14850463 +14850464 +14850465 +14850466 +14850467 +14850468 +14850469 +14850470 +14850471 +14850472 +14850473 +14850474 +14850475 +14850476 +14850477 +14850478 +14850479 +14850480 +14850481 +14850482 +14850483 +14850484 +14850485 +14850486 +14850487 +14850488 +14850489 +14850490 +14850491 +14850492 +14850493 +14850494 +14850495 +14850688 +14850689 +14850690 +14850691 +14850692 +14850693 +14850694 +14850695 +14850696 +14850697 +14850698 +14850699 +14850700 +14850701 +14850702 +14850703 +14850704 +14850705 +14850706 +14850707 +14850708 +14850709 +14850710 +14850711 +14850712 +14850713 +14850714 +14850715 +14850716 +14850717 +14850718 +14850719 +14850720 +14850721 +14850722 +14850723 +14850724 +14850725 +14850726 +14850727 +14850728 +14850729 +14850730 +14850731 +14850732 +14850733 +14850734 +14850735 +14850736 +14850737 +14850738 +14850739 +14850740 +14850741 +14850742 +14850743 +14850744 +14850745 +14850746 +14850747 +14850748 +14850749 +14850750 +14850751 +14850944 +14850945 +14850946 +14850947 +14850948 +14850949 +14850950 +14850951 +14850952 +14850953 +14850954 +14850955 +14850956 +14850957 +14850958 +14850959 +14850960 +14850961 +14850962 +14850963 +14850964 +14850965 +14850966 +14850967 +14850968 +14850969 +14850970 +14850971 +14850972 +14850973 +14850974 +14850975 +14850976 +14850977 +14850978 +14850979 +14850980 +14850981 +14850982 +14850983 +14850984 +14850985 +14850986 +14850987 +14850988 +14850989 +14850990 +14850991 +14850992 +14850993 +14850994 +14850995 +14850996 +14850997 +14850998 +14850999 +14851000 +14851001 +14851002 +14851003 +14851004 +14851005 +14851006 +14851007 +14851200 +14851201 +14851202 +14851203 +14851204 +14851205 +14851206 +14851207 +14851208 +14851209 +14851210 +14851211 +14851212 +14851213 +14851214 +14851215 +14851216 +14851217 +14851218 +14851219 +14851220 +14851221 +14851222 +14851223 +14851224 +14851225 +14851226 +14851227 +14851228 +14851229 +14851230 +14851231 +14851232 +14851233 +14851234 +14851235 +14851236 +14851237 +14851238 +14851239 +14851240 +14851241 +14851242 +14851243 +14851244 +14851245 +14851246 +14851247 +14851248 +14851249 +14851250 +14851251 +14851252 +14851253 +14851254 +14851255 +14851256 +14851257 +14851258 +14851259 +14851260 +14851261 +14851262 +14851263 +14851456 +14851457 +14851458 +14851459 +14851460 +14851461 +14851462 +14851463 +14851464 +14851465 +14851466 +14851467 +14851468 +14851469 +14851470 +14851471 +14851472 +14851473 +14851474 +14851475 +14851476 +14851477 +14851478 +14851479 +14851480 +14851481 +14851482 +14851483 +14851484 +14851485 +14851486 +14851487 +14851488 +14851489 +14851490 +14851491 +14851492 +14851493 +14851494 +14851495 +14851496 +14851497 +14851498 +14851499 +14851500 +14851501 +14851502 +14851503 +14851504 +14851505 +14851506 +14851507 +14851508 +14851509 +14851510 +14851511 +14851512 +14851513 +14851514 +14851515 +14851516 +14851517 +14851518 +14851519 +14851712 +14851713 +14851714 +14851715 +14851716 +14851717 +14851718 +14851719 +14851720 +14851721 +14851722 +14851723 +14851724 +14851725 +14851726 +14851727 +14851728 +14851729 +14851730 +14851731 +14851732 +14851733 +14851734 +14851735 +14851736 +14851737 +14851738 +14851739 +14851740 +14851741 +14851742 +14851743 +14851744 +14851745 +14851746 +14851747 +14851748 +14851749 +14851750 +14851751 +14851752 +14851753 +14851754 +14851755 +14851756 +14851757 +14851758 +14851759 +14851760 +14851761 +14851762 +14851763 +14851764 +14851765 +14851766 +14851767 +14851768 +14851769 +14851770 +14851771 +14851772 +14851773 +14851774 +14851775 +14853300 +14853301 +14855301 +14855302 +14855303 +14855323 +14855324 +14855568 +14855573 +14909616 +14909629 +14912151 +14912153 diff --git a/level_0/f_utf/data/tests/bytesequences/symbols-all.txt b/level_0/f_utf/data/tests/bytesequences/symbol-all.txt similarity index 100% rename from level_0/f_utf/data/tests/bytesequences/symbols-all.txt rename to level_0/f_utf/data/tests/bytesequences/symbol-all.txt diff --git a/level_0/f_utf/data/tests/codepoints/control-all.txt b/level_0/f_utf/data/tests/codepoints/control-all.txt new file mode 100644 index 0000000..7d8df7b --- /dev/null +++ b/level_0/f_utf/data/tests/codepoints/control-all.txt @@ -0,0 +1,65 @@ +U+0000 +U+0001 +U+0002 +U+0003 +U+0004 +U+0005 +U+0006 +U+0007 +U+0008 +U+0009 +U+000A +U+000B +U+000C +U+000D +U+000E +U+000F +U+0010 +U+0011 +U+0012 +U+0013 +U+0014 +U+0015 +U+0016 +U+0017 +U+0018 +U+0019 +U+001A +U+001B +U+001C +U+001D +U+001E +U+001F +U+007F +U+0080 +U+0081 +U+0082 +U+0083 +U+0084 +U+0085 +U+0086 +U+0087 +U+0088 +U+0089 +U+008A +U+008B +U+008C +U+008D +U+008E +U+008F +U+0090 +U+0091 +U+0092 +U+0093 +U+0094 +U+0095 +U+0096 +U+0097 +U+0098 +U+0099 +U+009A +U+009B +U+009C +U+009D +U+009E +U+009F diff --git a/level_0/f_utf/data/tests/codepoints/digit-all.txt b/level_0/f_utf/data/tests/codepoints/digit-all.txt new file mode 100644 index 0000000..4f954bd --- /dev/null +++ b/level_0/f_utf/data/tests/codepoints/digit-all.txt @@ -0,0 +1,650 @@ +U+0030 +U+0031 +U+0032 +U+0033 +U+0034 +U+0035 +U+0036 +U+0037 +U+0038 +U+0039 +U+0660 +U+0661 +U+0662 +U+0663 +U+0664 +U+0665 +U+0666 +U+0667 +U+0668 +U+0669 +U+06F0 +U+06F1 +U+06F2 +U+06F3 +U+06F4 +U+06F5 +U+06F6 +U+06F7 +U+06F8 +U+06F9 +U+07C0 +U+07C1 +U+07C2 +U+07C3 +U+07C4 +U+07C5 +U+07C6 +U+07C7 +U+07C8 +U+07C9 +U+0966 +U+0967 +U+0968 +U+0969 +U+096A +U+096B +U+096C +U+096D +U+096E +U+096F +U+09E6 +U+09E7 +U+09E8 +U+09E9 +U+09EA +U+09EB +U+09EC +U+09ED +U+09EE +U+09EF +U+0A66 +U+0A67 +U+0A68 +U+0A69 +U+0A6A +U+0A6B +U+0A6C +U+0A6D +U+0A6E +U+0A6F +U+0AE6 +U+0AE7 +U+0AE8 +U+0AE9 +U+0AEA +U+0AEB +U+0AEC +U+0AED +U+0AEE +U+0AEF +U+0B66 +U+0B67 +U+0B68 +U+0B69 +U+0B6A +U+0B6B +U+0B6C +U+0B6D +U+0B6E +U+0B6F +U+0BE6 +U+0BE7 +U+0BE8 +U+0BE9 +U+0BEA +U+0BEB +U+0BEC +U+0BED +U+0BEE +U+0BEF +U+0C66 +U+0C67 +U+0C68 +U+0C69 +U+0C6A +U+0C6B +U+0C6C +U+0C6D +U+0C6E +U+0C6F +U+0CE6 +U+0CE7 +U+0CE8 +U+0CE9 +U+0CEA +U+0CEB +U+0CEC +U+0CED +U+0CEE +U+0CEF +U+0D66 +U+0D67 +U+0D68 +U+0D69 +U+0D6A +U+0D6B +U+0D6C +U+0D6D +U+0D6E +U+0D6F +U+0DE6 +U+0DE7 +U+0DE8 +U+0DE9 +U+0DEA +U+0DEB +U+0DEC +U+0DED +U+0DEE +U+0DEF +U+0E50 +U+0E51 +U+0E52 +U+0E53 +U+0E54 +U+0E55 +U+0E56 +U+0E57 +U+0E58 +U+0E59 +U+0ED0 +U+0ED1 +U+0ED2 +U+0ED3 +U+0ED4 +U+0ED5 +U+0ED6 +U+0ED7 +U+0ED8 +U+0ED9 +U+0F20 +U+0F21 +U+0F22 +U+0F23 +U+0F24 +U+0F25 +U+0F26 +U+0F27 +U+0F28 +U+0F29 +U+1040 +U+1041 +U+1042 +U+1043 +U+1044 +U+1045 +U+1046 +U+1047 +U+1048 +U+1049 +U+104A0 +U+104A1 +U+104A2 +U+104A3 +U+104A4 +U+104A5 +U+104A6 +U+104A7 +U+104A8 +U+104A9 +U+1090 +U+1091 +U+1092 +U+1093 +U+1094 +U+1095 +U+1096 +U+1097 +U+1098 +U+1099 +U+10D30 +U+10D31 +U+10D32 +U+10D33 +U+10D34 +U+10D35 +U+10D36 +U+10D37 +U+10D38 +U+10D39 +U+11066 +U+11067 +U+11068 +U+11069 +U+1106A +U+1106B +U+1106C +U+1106D +U+1106E +U+1106F +U+110F0 +U+110F1 +U+110F2 +U+110F3 +U+110F4 +U+110F5 +U+110F6 +U+110F7 +U+110F8 +U+110F9 +U+11136 +U+11137 +U+11138 +U+11139 +U+1113A +U+1113B +U+1113C +U+1113D +U+1113E +U+1113F +U+111D0 +U+111D1 +U+111D2 +U+111D3 +U+111D4 +U+111D5 +U+111D6 +U+111D7 +U+111D8 +U+111D9 +U+112F0 +U+112F1 +U+112F2 +U+112F3 +U+112F4 +U+112F5 +U+112F6 +U+112F7 +U+112F8 +U+112F9 +U+11450 +U+11451 +U+11452 +U+11453 +U+11454 +U+11455 +U+11456 +U+11457 +U+11458 +U+11459 +U+114D0 +U+114D1 +U+114D2 +U+114D3 +U+114D4 +U+114D5 +U+114D6 +U+114D7 +U+114D8 +U+114D9 +U+11650 +U+11651 +U+11652 +U+11653 +U+11654 +U+11655 +U+11656 +U+11657 +U+11658 +U+11659 +U+116C0 +U+116C1 +U+116C2 +U+116C3 +U+116C4 +U+116C5 +U+116C6 +U+116C7 +U+116C8 +U+116C9 +U+11730 +U+11731 +U+11732 +U+11733 +U+11734 +U+11735 +U+11736 +U+11737 +U+11738 +U+11739 +U+118E0 +U+118E1 +U+118E2 +U+118E3 +U+118E4 +U+118E5 +U+118E6 +U+118E7 +U+118E8 +U+118E9 +U+11950 +U+11951 +U+11952 +U+11953 +U+11954 +U+11955 +U+11956 +U+11957 +U+11958 +U+11959 +U+11C50 +U+11C51 +U+11C52 +U+11C53 +U+11C54 +U+11C55 +U+11C56 +U+11C57 +U+11C58 +U+11C59 +U+11D50 +U+11D51 +U+11D52 +U+11D53 +U+11D54 +U+11D55 +U+11D56 +U+11D57 +U+11D58 +U+11D59 +U+11DA0 +U+11DA1 +U+11DA2 +U+11DA3 +U+11DA4 +U+11DA5 +U+11DA6 +U+11DA7 +U+11DA8 +U+11DA9 +U+16A60 +U+16A61 +U+16A62 +U+16A63 +U+16A64 +U+16A65 +U+16A66 +U+16A67 +U+16A68 +U+16A69 +U+16B50 +U+16B51 +U+16B52 +U+16B53 +U+16B54 +U+16B55 +U+16B56 +U+16B57 +U+16B58 +U+16B59 +U+17E0 +U+17E1 +U+17E2 +U+17E3 +U+17E4 +U+17E5 +U+17E6 +U+17E7 +U+17E8 +U+17E9 +U+1810 +U+1811 +U+1812 +U+1813 +U+1814 +U+1815 +U+1816 +U+1817 +U+1818 +U+1819 +U+1946 +U+1947 +U+1948 +U+1949 +U+194A +U+194B +U+194C +U+194D +U+194E +U+194F +U+19D0 +U+19D1 +U+19D2 +U+19D3 +U+19D4 +U+19D5 +U+19D6 +U+19D7 +U+19D8 +U+19D9 +U+1A80 +U+1A81 +U+1A82 +U+1A83 +U+1A84 +U+1A85 +U+1A86 +U+1A87 +U+1A88 +U+1A89 +U+1A90 +U+1A91 +U+1A92 +U+1A93 +U+1A94 +U+1A95 +U+1A96 +U+1A97 +U+1A98 +U+1A99 +U+1B50 +U+1B51 +U+1B52 +U+1B53 +U+1B54 +U+1B55 +U+1B56 +U+1B57 +U+1B58 +U+1B59 +U+1BB0 +U+1BB1 +U+1BB2 +U+1BB3 +U+1BB4 +U+1BB5 +U+1BB6 +U+1BB7 +U+1BB8 +U+1BB9 +U+1C40 +U+1C41 +U+1C42 +U+1C43 +U+1C44 +U+1C45 +U+1C46 +U+1C47 +U+1C48 +U+1C49 +U+1C50 +U+1C51 +U+1C52 +U+1C53 +U+1C54 +U+1C55 +U+1C56 +U+1C57 +U+1C58 +U+1C59 +U+1D7CE +U+1D7CF +U+1D7D0 +U+1D7D1 +U+1D7D2 +U+1D7D3 +U+1D7D4 +U+1D7D5 +U+1D7D6 +U+1D7D7 +U+1D7D8 +U+1D7D9 +U+1D7DA +U+1D7DB +U+1D7DC +U+1D7DD +U+1D7DE +U+1D7DF +U+1D7E0 +U+1D7E1 +U+1D7E2 +U+1D7E3 +U+1D7E4 +U+1D7E5 +U+1D7E6 +U+1D7E7 +U+1D7E8 +U+1D7E9 +U+1D7EA +U+1D7EB +U+1D7EC +U+1D7ED +U+1D7EE +U+1D7EF +U+1D7F0 +U+1D7F1 +U+1D7F2 +U+1D7F3 +U+1D7F4 +U+1D7F5 +U+1D7F6 +U+1D7F7 +U+1D7F8 +U+1D7F9 +U+1D7FA +U+1D7FB +U+1D7FC +U+1D7FD +U+1D7FE +U+1D7FF +U+1E140 +U+1E141 +U+1E142 +U+1E143 +U+1E144 +U+1E145 +U+1E146 +U+1E147 +U+1E148 +U+1E149 +U+1E2F0 +U+1E2F1 +U+1E2F2 +U+1E2F3 +U+1E2F4 +U+1E2F5 +U+1E2F6 +U+1E2F7 +U+1E2F8 +U+1E2F9 +U+1E950 +U+1E951 +U+1E952 +U+1E953 +U+1E954 +U+1E955 +U+1E956 +U+1E957 +U+1E958 +U+1E959 +U+1FBF0 +U+1FBF1 +U+1FBF2 +U+1FBF3 +U+1FBF4 +U+1FBF5 +U+1FBF6 +U+1FBF7 +U+1FBF8 +U+1FBF9 +U+A620 +U+A621 +U+A622 +U+A623 +U+A624 +U+A625 +U+A626 +U+A627 +U+A628 +U+A629 +U+A8D0 +U+A8D1 +U+A8D2 +U+A8D3 +U+A8D4 +U+A8D5 +U+A8D6 +U+A8D7 +U+A8D8 +U+A8D9 +U+A900 +U+A901 +U+A902 +U+A903 +U+A904 +U+A905 +U+A906 +U+A907 +U+A908 +U+A909 +U+A9D0 +U+A9D1 +U+A9D2 +U+A9D3 +U+A9D4 +U+A9D5 +U+A9D6 +U+A9D7 +U+A9D8 +U+A9D9 +U+A9F0 +U+A9F1 +U+A9F2 +U+A9F3 +U+A9F4 +U+A9F5 +U+A9F6 +U+A9F7 +U+A9F8 +U+A9F9 +U+AA50 +U+AA51 +U+AA52 +U+AA53 +U+AA54 +U+AA55 +U+AA56 +U+AA57 +U+AA58 +U+AA59 +U+ABF0 +U+ABF1 +U+ABF2 +U+ABF3 +U+ABF4 +U+ABF5 +U+ABF6 +U+ABF7 +U+ABF8 +U+ABF9 +U+FF10 +U+FF11 +U+FF12 +U+FF13 +U+FF14 +U+FF15 +U+FF16 +U+FF17 +U+FF18 +U+FF19 diff --git a/level_0/f_utf/data/tests/codepoints/emoji-all.txt b/level_0/f_utf/data/tests/codepoints/emoji-all.txt new file mode 100644 index 0000000..53ce47b --- /dev/null +++ b/level_0/f_utf/data/tests/codepoints/emoji-all.txt @@ -0,0 +1,1980 @@ +U+00A9 +U+00AE +U+1F004 +U+1F0CF +U+1F170 +U+1F171 +U+1F17E +U+1F17F +U+1F18E +U+1F191 +U+1F192 +U+1F193 +U+1F194 +U+1F195 +U+1F196 +U+1F197 +U+1F198 +U+1F199 +U+1F19A +U+1F1E6 +U+1F1E7 +U+1F1E8 +U+1F1E9 +U+1F1EA +U+1F1EB +U+1F1EC +U+1F1ED +U+1F1EE +U+1F1EF +U+1F201 +U+1F202 +U+1F21A +U+1F22F +U+1F232 +U+1F233 +U+1F234 +U+1F235 +U+1F236 +U+1F237 +U+1F238 +U+1F239 +U+1F23A +U+1F250 +U+1F251 +U+1F300 +U+1F301 +U+1F302 +U+1F303 +U+1F304 +U+1F305 +U+1F306 +U+1F307 +U+1F308 +U+1F309 +U+1F30A +U+1F30B +U+1F30C +U+1F30D +U+1F30E +U+1F30F +U+1F310 +U+1F311 +U+1F312 +U+1F313 +U+1F314 +U+1F315 +U+1F316 +U+1F317 +U+1F318 +U+1F319 +U+1F31A +U+1F31B +U+1F31C +U+1F31D +U+1F31E +U+1F31F +U+1F320 +U+1F321 +U+1F322 +U+1F323 +U+1F324 +U+1F325 +U+1F326 +U+1F327 +U+1F328 +U+1F329 +U+1F32A +U+1F32B +U+1F32C +U+1F32D +U+1F32E +U+1F32F +U+1F330 +U+1F331 +U+1F332 +U+1F333 +U+1F334 +U+1F335 +U+1F336 +U+1F337 +U+1F338 +U+1F339 +U+1F33A +U+1F33B +U+1F33C +U+1F33D +U+1F33E +U+1F33F +U+1F340 +U+1F341 +U+1F342 +U+1F343 +U+1F344 +U+1F345 +U+1F346 +U+1F347 +U+1F348 +U+1F349 +U+1F34A +U+1F34B +U+1F34C +U+1F34D +U+1F34E +U+1F34F +U+1F350 +U+1F351 +U+1F352 +U+1F353 +U+1F354 +U+1F355 +U+1F356 +U+1F357 +U+1F358 +U+1F359 +U+1F35A +U+1F35B +U+1F35C +U+1F35D +U+1F35E +U+1F35F +U+1F360 +U+1F361 +U+1F362 +U+1F363 +U+1F364 +U+1F365 +U+1F366 +U+1F367 +U+1F368 +U+1F369 +U+1F36A +U+1F36B +U+1F36C +U+1F36D +U+1F36E +U+1F36F +U+1F370 +U+1F371 +U+1F372 +U+1F373 +U+1F374 +U+1F375 +U+1F376 +U+1F377 +U+1F378 +U+1F379 +U+1F37A +U+1F37B +U+1F37C +U+1F37D +U+1F37E +U+1F37F +U+1F380 +U+1F381 +U+1F382 +U+1F383 +U+1F384 +U+1F385 +U+1F386 +U+1F387 +U+1F388 +U+1F389 +U+1F38A +U+1F38B +U+1F38C +U+1F38D +U+1F38E +U+1F38F +U+1F390 +U+1F391 +U+1F392 +U+1F393 +U+1F394 +U+1F395 +U+1F396 +U+1F397 +U+1F398 +U+1F399 +U+1F39A +U+1F39B +U+1F39C +U+1F39D +U+1F39E +U+1F39F +U+1F3A0 +U+1F3A1 +U+1F3A2 +U+1F3A3 +U+1F3A4 +U+1F3A5 +U+1F3A6 +U+1F3A7 +U+1F3A8 +U+1F3A9 +U+1F3AA +U+1F3AB +U+1F3AC +U+1F3AD +U+1F3AE +U+1F3AF +U+1F3B0 +U+1F3B1 +U+1F3B2 +U+1F3B3 +U+1F3B4 +U+1F3B5 +U+1F3B6 +U+1F3B7 +U+1F3B8 +U+1F3B9 +U+1F3BA +U+1F3BB +U+1F3BC +U+1F3BD +U+1F3BE +U+1F3BF +U+1F3C0 +U+1F3C1 +U+1F3C2 +U+1F3C3 +U+1F3C4 +U+1F3C5 +U+1F3C6 +U+1F3C7 +U+1F3C8 +U+1F3C9 +U+1F3CA +U+1F3CB +U+1F3CC +U+1F3CD +U+1F3CE +U+1F3CF +U+1F3D0 +U+1F3D1 +U+1F3D2 +U+1F3D3 +U+1F3D4 +U+1F3D5 +U+1F3D6 +U+1F3D7 +U+1F3D8 +U+1F3D9 +U+1F3DA +U+1F3DB +U+1F3DC +U+1F3DD +U+1F3DE +U+1F3DF +U+1F3E0 +U+1F3E1 +U+1F3E2 +U+1F3E3 +U+1F3E4 +U+1F3E5 +U+1F3E6 +U+1F3E7 +U+1F3E8 +U+1F3E9 +U+1F3EA +U+1F3EB +U+1F3EC +U+1F3ED +U+1F3EE +U+1F3EF +U+1F3F0 +U+1F3F1 +U+1F3F2 +U+1F3F3 +U+1F3F4 +U+1F3F5 +U+1F3F6 +U+1F3F7 +U+1F3F8 +U+1F3F9 +U+1F3FA +U+1F3FB +U+1F3FC +U+1F3FD +U+1F3FE +U+1F3FF +U+1F400 +U+1F401 +U+1F402 +U+1F403 +U+1F404 +U+1F405 +U+1F406 +U+1F407 +U+1F408 +U+1F409 +U+1F40A +U+1F40B +U+1F40C +U+1F40D +U+1F40E +U+1F40F +U+1F410 +U+1F411 +U+1F412 +U+1F413 +U+1F414 +U+1F415 +U+1F416 +U+1F417 +U+1F418 +U+1F419 +U+1F41A +U+1F41B +U+1F41C +U+1F41D +U+1F41E +U+1F41F +U+1F420 +U+1F421 +U+1F422 +U+1F423 +U+1F424 +U+1F425 +U+1F426 +U+1F427 +U+1F428 +U+1F429 +U+1F42A +U+1F42B +U+1F42C +U+1F42D +U+1F42E +U+1F42F +U+1F430 +U+1F431 +U+1F432 +U+1F433 +U+1F434 +U+1F435 +U+1F436 +U+1F437 +U+1F438 +U+1F439 +U+1F43A +U+1F43B +U+1F43C +U+1F43D +U+1F43E +U+1F43F +U+1F440 +U+1F441 +U+1F442 +U+1F443 +U+1F444 +U+1F445 +U+1F446 +U+1F447 +U+1F448 +U+1F449 +U+1F44A +U+1F44B +U+1F44C +U+1F44D +U+1F44E +U+1F44F +U+1F450 +U+1F451 +U+1F452 +U+1F453 +U+1F454 +U+1F455 +U+1F456 +U+1F457 +U+1F458 +U+1F459 +U+1F45A +U+1F45B +U+1F45C +U+1F45D +U+1F45E +U+1F45F +U+1F460 +U+1F461 +U+1F462 +U+1F463 +U+1F464 +U+1F465 +U+1F466 +U+1F467 +U+1F468 +U+1F469 +U+1F46A +U+1F46B +U+1F46C +U+1F46D +U+1F46E +U+1F46F +U+1F470 +U+1F471 +U+1F472 +U+1F473 +U+1F474 +U+1F475 +U+1F476 +U+1F477 +U+1F478 +U+1F479 +U+1F47A +U+1F47B +U+1F47C +U+1F47D +U+1F47E +U+1F47F +U+1F480 +U+1F481 +U+1F482 +U+1F483 +U+1F484 +U+1F485 +U+1F486 +U+1F487 +U+1F488 +U+1F489 +U+1F48A +U+1F48B +U+1F48C +U+1F48D +U+1F48E +U+1F48F +U+1F490 +U+1F491 +U+1F492 +U+1F493 +U+1F494 +U+1F495 +U+1F496 +U+1F497 +U+1F498 +U+1F499 +U+1F49A +U+1F49B +U+1F49C +U+1F49D +U+1F49E +U+1F49F +U+1F4A0 +U+1F4A1 +U+1F4A2 +U+1F4A3 +U+1F4A4 +U+1F4A5 +U+1F4A6 +U+1F4A7 +U+1F4A8 +U+1F4A9 +U+1F4AA +U+1F4AB +U+1F4AC +U+1F4AD +U+1F4AE +U+1F4AF +U+1F4B0 +U+1F4B1 +U+1F4B2 +U+1F4B3 +U+1F4B4 +U+1F4B5 +U+1F4B6 +U+1F4B7 +U+1F4B8 +U+1F4B9 +U+1F4BA +U+1F4BB +U+1F4BC +U+1F4BD +U+1F4BE +U+1F4BF +U+1F4C0 +U+1F4C1 +U+1F4C2 +U+1F4C3 +U+1F4C4 +U+1F4C5 +U+1F4C6 +U+1F4C7 +U+1F4C8 +U+1F4C9 +U+1F4CA +U+1F4CB +U+1F4CC +U+1F4CD +U+1F4CE +U+1F4CF +U+1F4D0 +U+1F4D1 +U+1F4D2 +U+1F4D3 +U+1F4D4 +U+1F4D5 +U+1F4D6 +U+1F4D7 +U+1F4D8 +U+1F4D9 +U+1F4DA +U+1F4DB +U+1F4DC +U+1F4DD +U+1F4DE +U+1F4DF +U+1F4E0 +U+1F4E1 +U+1F4E2 +U+1F4E3 +U+1F4E4 +U+1F4E5 +U+1F4E6 +U+1F4E7 +U+1F4E8 +U+1F4E9 +U+1F4EA +U+1F4EB +U+1F4EC +U+1F4ED +U+1F4EE +U+1F4EF +U+1F4F0 +U+1F4F1 +U+1F4F2 +U+1F4F3 +U+1F4F4 +U+1F4F5 +U+1F4F6 +U+1F4F7 +U+1F4F8 +U+1F4F9 +U+1F4FA +U+1F4FB +U+1F4FC +U+1F4FD +U+1F4FE +U+1F4FF +U+1F500 +U+1F501 +U+1F502 +U+1F503 +U+1F504 +U+1F505 +U+1F506 +U+1F507 +U+1F508 +U+1F509 +U+1F50A +U+1F50B +U+1F50C +U+1F50D +U+1F50E +U+1F50F +U+1F510 +U+1F511 +U+1F512 +U+1F513 +U+1F514 +U+1F515 +U+1F516 +U+1F517 +U+1F518 +U+1F519 +U+1F51A +U+1F51B +U+1F51C +U+1F51D +U+1F51E +U+1F51F +U+1F520 +U+1F521 +U+1F522 +U+1F523 +U+1F524 +U+1F525 +U+1F526 +U+1F527 +U+1F528 +U+1F529 +U+1F52A +U+1F52B +U+1F52C +U+1F52D +U+1F52E +U+1F52F +U+1F530 +U+1F531 +U+1F532 +U+1F533 +U+1F534 +U+1F535 +U+1F536 +U+1F537 +U+1F538 +U+1F539 +U+1F53A +U+1F53B +U+1F53C +U+1F53D +U+1F53E +U+1F53F +U+1F540 +U+1F541 +U+1F542 +U+1F543 +U+1F544 +U+1F545 +U+1F546 +U+1F547 +U+1F548 +U+1F549 +U+1F54A +U+1F54B +U+1F54C +U+1F54D +U+1F54E +U+1F54F +U+1F550 +U+1F551 +U+1F552 +U+1F553 +U+1F554 +U+1F555 +U+1F556 +U+1F557 +U+1F558 +U+1F559 +U+1F55A +U+1F55B +U+1F55C +U+1F55D +U+1F55E +U+1F55F +U+1F560 +U+1F561 +U+1F562 +U+1F563 +U+1F564 +U+1F565 +U+1F566 +U+1F567 +U+1F568 +U+1F569 +U+1F56A +U+1F56B +U+1F56C +U+1F56D +U+1F56E +U+1F56F +U+1F570 +U+1F571 +U+1F572 +U+1F573 +U+1F574 +U+1F575 +U+1F576 +U+1F577 +U+1F578 +U+1F579 +U+1F57A +U+1F57B +U+1F57C +U+1F57D +U+1F57E +U+1F57F +U+1F580 +U+1F581 +U+1F582 +U+1F583 +U+1F584 +U+1F585 +U+1F586 +U+1F587 +U+1F588 +U+1F589 +U+1F58A +U+1F58B +U+1F58C +U+1F58D +U+1F58E +U+1F58F +U+1F590 +U+1F591 +U+1F592 +U+1F593 +U+1F594 +U+1F595 +U+1F596 +U+1F597 +U+1F598 +U+1F599 +U+1F59A +U+1F59B +U+1F59C +U+1F59D +U+1F59E +U+1F59F +U+1F5A0 +U+1F5A1 +U+1F5A2 +U+1F5A3 +U+1F5A4 +U+1F5A5 +U+1F5A6 +U+1F5A7 +U+1F5A8 +U+1F5A9 +U+1F5AA +U+1F5AB +U+1F5AC +U+1F5AD +U+1F5AE +U+1F5AF +U+1F5B0 +U+1F5B1 +U+1F5B2 +U+1F5B3 +U+1F5B4 +U+1F5B5 +U+1F5B6 +U+1F5B7 +U+1F5B8 +U+1F5B9 +U+1F5BA +U+1F5BB +U+1F5BC +U+1F5BD +U+1F5BE +U+1F5BF +U+1F5C0 +U+1F5C1 +U+1F5C2 +U+1F5C3 +U+1F5C4 +U+1F5C5 +U+1F5C6 +U+1F5C7 +U+1F5C8 +U+1F5C9 +U+1F5CA +U+1F5CB +U+1F5CC +U+1F5CD +U+1F5CE +U+1F5CF +U+1F5D0 +U+1F5D1 +U+1F5D2 +U+1F5D3 +U+1F5D4 +U+1F5D5 +U+1F5D6 +U+1F5D7 +U+1F5D8 +U+1F5D9 +U+1F5DA +U+1F5DB +U+1F5DC +U+1F5DD +U+1F5DE +U+1F5DF +U+1F5E0 +U+1F5E1 +U+1F5E2 +U+1F5E3 +U+1F5E4 +U+1F5E5 +U+1F5E6 +U+1F5E7 +U+1F5E8 +U+1F5E9 +U+1F5EA +U+1F5EB +U+1F5EC +U+1F5ED +U+1F5EE +U+1F5EF +U+1F5F0 +U+1F5F1 +U+1F5F2 +U+1F5F3 +U+1F5F4 +U+1F5F5 +U+1F5F6 +U+1F5F7 +U+1F5F8 +U+1F5F9 +U+1F5FA +U+1F5FB +U+1F5FC +U+1F5FD +U+1F5FE +U+1F5FF +U+1F600 +U+1F601 +U+1F602 +U+1F603 +U+1F604 +U+1F605 +U+1F606 +U+1F607 +U+1F608 +U+1F609 +U+1F60A +U+1F60B +U+1F60C +U+1F60D +U+1F60E +U+1F60F +U+1F610 +U+1F611 +U+1F612 +U+1F613 +U+1F614 +U+1F615 +U+1F616 +U+1F617 +U+1F618 +U+1F619 +U+1F61A +U+1F61B +U+1F61C +U+1F61D +U+1F61E +U+1F61F +U+1F620 +U+1F621 +U+1F622 +U+1F623 +U+1F624 +U+1F625 +U+1F626 +U+1F627 +U+1F628 +U+1F629 +U+1F62A +U+1F62B +U+1F62C +U+1F62D +U+1F62E +U+1F62F +U+1F630 +U+1F631 +U+1F632 +U+1F633 +U+1F634 +U+1F635 +U+1F636 +U+1F637 +U+1F638 +U+1F639 +U+1F63A +U+1F63B +U+1F63C +U+1F63D +U+1F63E +U+1F63F +U+1F640 +U+1F641 +U+1F642 +U+1F643 +U+1F644 +U+1F645 +U+1F646 +U+1F647 +U+1F648 +U+1F649 +U+1F64A +U+1F64B +U+1F64C +U+1F64D +U+1F64E +U+1F64F +U+1F680 +U+1F681 +U+1F682 +U+1F683 +U+1F684 +U+1F685 +U+1F686 +U+1F687 +U+1F688 +U+1F689 +U+1F68A +U+1F68B +U+1F68C +U+1F68D +U+1F68E +U+1F68F +U+1F690 +U+1F691 +U+1F692 +U+1F693 +U+1F694 +U+1F695 +U+1F696 +U+1F697 +U+1F698 +U+1F699 +U+1F69A +U+1F69B +U+1F69C +U+1F69D +U+1F69E +U+1F69F +U+1F6A0 +U+1F6A1 +U+1F6A2 +U+1F6A3 +U+1F6A4 +U+1F6A5 +U+1F6A6 +U+1F6A7 +U+1F6A8 +U+1F6A9 +U+1F6AA +U+1F6AB +U+1F6AC +U+1F6AD +U+1F6AE +U+1F6AF +U+1F6B0 +U+1F6B1 +U+1F6B2 +U+1F6B3 +U+1F6B4 +U+1F6B5 +U+1F6B6 +U+1F6B7 +U+1F6B8 +U+1F6B9 +U+1F6BA +U+1F6BB +U+1F6BC +U+1F6BD +U+1F6BE +U+1F6BF +U+1F6C0 +U+1F6C1 +U+1F6C2 +U+1F6C3 +U+1F6C4 +U+1F6C5 +U+1F6C6 +U+1F6C7 +U+1F6C8 +U+1F6C9 +U+1F6CA +U+1F6CB +U+1F6CC +U+1F6CD +U+1F6CE +U+1F6CF +U+1F6D0 +U+1F6D1 +U+1F6D2 +U+1F6D3 +U+1F6D4 +U+1F6D5 +U+1F6D6 +U+1F6D7 +U+1F6D8 +U+1F6D9 +U+1F6DA +U+1F6DB +U+1F6DC +U+1F6DD +U+1F6DE +U+1F6DF +U+1F6E0 +U+1F6E1 +U+1F6E2 +U+1F6E3 +U+1F6E4 +U+1F6E5 +U+1F6E6 +U+1F6E7 +U+1F6E8 +U+1F6E9 +U+1F6EA +U+1F6EB +U+1F6EC +U+1F6ED +U+1F6EE +U+1F6EF +U+1F6F0 +U+1F6F1 +U+1F6F2 +U+1F6F3 +U+1F6F4 +U+1F6F5 +U+1F6F6 +U+1F6F7 +U+1F6F8 +U+1F6F9 +U+1F6FA +U+1F6FB +U+1F6FC +U+1F6FD +U+1F6FE +U+1F6FF +U+1F7E0 +U+1F7E1 +U+1F7E2 +U+1F7E3 +U+1F7E4 +U+1F7E5 +U+1F7E6 +U+1F7E7 +U+1F7E8 +U+1F7E9 +U+1F7EA +U+1F7EB +U+1F7F0 +U+1F900 +U+1F901 +U+1F902 +U+1F903 +U+1F904 +U+1F905 +U+1F906 +U+1F907 +U+1F908 +U+1F909 +U+1F90A +U+1F90B +U+1F90C +U+1F90D +U+1F90E +U+1F90F +U+1F910 +U+1F911 +U+1F912 +U+1F913 +U+1F914 +U+1F915 +U+1F916 +U+1F917 +U+1F918 +U+1F919 +U+1F91A +U+1F91B +U+1F91C +U+1F91D +U+1F91E +U+1F91F +U+1F920 +U+1F921 +U+1F922 +U+1F923 +U+1F924 +U+1F925 +U+1F926 +U+1F927 +U+1F928 +U+1F929 +U+1F92A +U+1F92B +U+1F92C +U+1F92D +U+1F92E +U+1F92F +U+1F930 +U+1F931 +U+1F932 +U+1F933 +U+1F934 +U+1F935 +U+1F936 +U+1F937 +U+1F938 +U+1F939 +U+1F93A +U+1F93B +U+1F93C +U+1F93D +U+1F93E +U+1F93F +U+1F940 +U+1F941 +U+1F942 +U+1F943 +U+1F944 +U+1F945 +U+1F946 +U+1F947 +U+1F948 +U+1F949 +U+1F94A +U+1F94B +U+1F94C +U+1F94D +U+1F94E +U+1F94F +U+1F950 +U+1F951 +U+1F952 +U+1F953 +U+1F954 +U+1F955 +U+1F956 +U+1F957 +U+1F958 +U+1F959 +U+1F95A +U+1F95B +U+1F95C +U+1F95D +U+1F95E +U+1F95F +U+1F960 +U+1F961 +U+1F962 +U+1F963 +U+1F964 +U+1F965 +U+1F966 +U+1F967 +U+1F968 +U+1F969 +U+1F96A +U+1F96B +U+1F96C +U+1F96D +U+1F96E +U+1F96F +U+1F970 +U+1F971 +U+1F972 +U+1F973 +U+1F974 +U+1F975 +U+1F976 +U+1F977 +U+1F978 +U+1F979 +U+1F97A +U+1F97B +U+1F97C +U+1F97D +U+1F97E +U+1F97F +U+1F980 +U+1F981 +U+1F982 +U+1F983 +U+1F984 +U+1F985 +U+1F986 +U+1F987 +U+1F988 +U+1F989 +U+1F98A +U+1F98B +U+1F98C +U+1F98D +U+1F98E +U+1F98F +U+1F990 +U+1F991 +U+1F992 +U+1F993 +U+1F994 +U+1F995 +U+1F996 +U+1F997 +U+1F998 +U+1F999 +U+1F99A +U+1F99B +U+1F99C +U+1F99D +U+1F99E +U+1F99F +U+1F9A0 +U+1F9A1 +U+1F9A2 +U+1F9A3 +U+1F9A4 +U+1F9A5 +U+1F9A6 +U+1F9A7 +U+1F9A8 +U+1F9A9 +U+1F9AA +U+1F9AB +U+1F9AC +U+1F9AD +U+1F9AE +U+1F9AF +U+1F9B0 +U+1F9B1 +U+1F9B2 +U+1F9B3 +U+1F9B4 +U+1F9B5 +U+1F9B6 +U+1F9B7 +U+1F9B8 +U+1F9B9 +U+1F9BA +U+1F9BB +U+1F9BC +U+1F9BD +U+1F9BE +U+1F9BF +U+1F9C0 +U+1F9C1 +U+1F9C2 +U+1F9C3 +U+1F9C4 +U+1F9C5 +U+1F9C6 +U+1F9C7 +U+1F9C8 +U+1F9C9 +U+1F9CA +U+1F9CB +U+1F9CC +U+1F9CD +U+1F9CE +U+1F9CF +U+1F9D0 +U+1F9D1 +U+1F9D2 +U+1F9D3 +U+1F9D4 +U+1F9D5 +U+1F9D6 +U+1F9D7 +U+1F9D8 +U+1F9D9 +U+1F9DA +U+1F9DB +U+1F9DC +U+1F9DD +U+1F9DE +U+1F9DF +U+1F9E0 +U+1F9E1 +U+1F9E2 +U+1F9E3 +U+1F9E4 +U+1F9E5 +U+1F9E6 +U+1F9E7 +U+1F9E8 +U+1F9E9 +U+1F9EA +U+1F9EB +U+1F9EC +U+1F9ED +U+1F9EE +U+1F9EF +U+1F9F0 +U+1F9F1 +U+1F9F2 +U+1F9F3 +U+1F9F4 +U+1F9F5 +U+1F9F6 +U+1F9F7 +U+1F9F8 +U+1F9F9 +U+1F9FA +U+1F9FB +U+1F9FC +U+1F9FD +U+1F9FE +U+1F9FF +U+1FA70 +U+1FA71 +U+1FA72 +U+1FA73 +U+1FA74 +U+1FA78 +U+1FA79 +U+1FA7A +U+1FA7B +U+1FA7C +U+1FA80 +U+1FA81 +U+1FA82 +U+1FA83 +U+1FA84 +U+1FA85 +U+1FA86 +U+1FA90 +U+1FA91 +U+1FA92 +U+1FA93 +U+1FA94 +U+1FA95 +U+1FA96 +U+1FA97 +U+1FA98 +U+1FA99 +U+1FA9A +U+1FA9B +U+1FA9C +U+1FA9D +U+1FA9E +U+1FA9F +U+1FAA0 +U+1FAA1 +U+1FAA2 +U+1FAA3 +U+1FAA4 +U+1FAA5 +U+1FAA6 +U+1FAA7 +U+1FAA8 +U+1FAA9 +U+1FAAA +U+1FAAB +U+1FAAC +U+1FAB0 +U+1FAB1 +U+1FAB2 +U+1FAB3 +U+1FAB4 +U+1FAB5 +U+1FAB6 +U+1FAB7 +U+1FAB8 +U+1FAB9 +U+1FABA +U+1FAC0 +U+1FAC1 +U+1FAC2 +U+1FAC3 +U+1FAC4 +U+1FAC5 +U+1FAD0 +U+1FAD1 +U+1FAD2 +U+1FAD3 +U+1FAD4 +U+1FAD5 +U+1FAD6 +U+1FAD7 +U+1FAD8 +U+1FAD9 +U+1FAE0 +U+1FAE1 +U+1FAE2 +U+1FAE3 +U+1FAE4 +U+1FAE5 +U+1FAE6 +U+1FAE7 +U+1FAF0 +U+1FAF1 +U+1FAF2 +U+1FAF3 +U+1FAF4 +U+1FAF5 +U+1FAF6 +U+2048 +U+2049 +U+2122 +U+2139 +U+2190 +U+2191 +U+2192 +U+2193 +U+2194 +U+2195 +U+2196 +U+2197 +U+2198 +U+2199 +U+219A +U+219B +U+219C +U+219D +U+219E +U+219F +U+21A0 +U+21A1 +U+21A2 +U+21A3 +U+21A4 +U+21A5 +U+21A6 +U+21A7 +U+21A8 +U+21A9 +U+21AA +U+21AB +U+21AC +U+21AD +U+21AE +U+21AF +U+21B0 +U+21B1 +U+21B2 +U+21B3 +U+21B4 +U+21B5 +U+21B6 +U+21B7 +U+21B8 +U+21B9 +U+21BA +U+21BB +U+21BC +U+21BD +U+21BE +U+21BF +U+21C0 +U+21C1 +U+21C2 +U+21C3 +U+21C4 +U+21C5 +U+21C6 +U+21C7 +U+21C8 +U+21C9 +U+21CA +U+21CB +U+21CC +U+21CD +U+21CE +U+21CF +U+21D0 +U+21D1 +U+21D2 +U+21D3 +U+21D4 +U+21D5 +U+21D6 +U+21D7 +U+21D8 +U+21D9 +U+21DA +U+21DB +U+21DC +U+21DD +U+21DE +U+21DF +U+21E0 +U+21E1 +U+21E2 +U+21E3 +U+21E4 +U+21E5 +U+21E6 +U+21E7 +U+21E8 +U+21E9 +U+21EA +U+21EB +U+21EC +U+21ED +U+21EE +U+21EF +U+21F0 +U+21F1 +U+21F2 +U+21F3 +U+21F4 +U+21F5 +U+21F6 +U+21F7 +U+21F8 +U+21F9 +U+21FA +U+21FB +U+21FC +U+21FD +U+21FE +U+21FF +U+231A +U+231B +U+2328 +U+23CF +U+23E9 +U+23EA +U+23EB +U+23EC +U+23ED +U+23EE +U+23EF +U+23F0 +U+23F1 +U+23F2 +U+23F3 +U+23F8 +U+23F9 +U+23FA +U+25AA +U+25AB +U+25B6 +U+25C0 +U+25FB +U+25FC +U+25FD +U+25FE +U+2600 +U+2601 +U+2602 +U+2603 +U+2604 +U+2605 +U+2606 +U+2607 +U+2608 +U+2609 +U+260A +U+260B +U+260C +U+260D +U+260E +U+260F +U+2610 +U+2611 +U+2612 +U+2613 +U+2614 +U+2615 +U+2616 +U+2617 +U+2618 +U+2619 +U+261A +U+261B +U+261C +U+261D +U+261E +U+261F +U+2620 +U+2621 +U+2622 +U+2623 +U+2624 +U+2625 +U+2626 +U+2627 +U+2628 +U+2629 +U+262A +U+262B +U+262C +U+262D +U+262E +U+262F +U+2630 +U+2631 +U+2632 +U+2633 +U+2634 +U+2635 +U+2636 +U+2637 +U+2638 +U+2639 +U+263A +U+263B +U+263C +U+263D +U+263E +U+263F +U+2640 +U+2641 +U+2642 +U+2643 +U+2644 +U+2645 +U+2646 +U+2647 +U+2648 +U+2649 +U+264A +U+264B +U+264C +U+264D +U+264E +U+264F +U+2650 +U+2651 +U+2652 +U+2653 +U+2654 +U+2655 +U+2656 +U+2657 +U+2658 +U+2659 +U+265A +U+265B +U+265C +U+265D +U+265E +U+265F +U+2660 +U+2661 +U+2662 +U+2663 +U+2664 +U+2665 +U+2666 +U+2667 +U+2668 +U+2669 +U+266A +U+266B +U+266C +U+266D +U+266E +U+266F +U+2670 +U+2671 +U+2672 +U+2673 +U+2674 +U+2675 +U+2676 +U+2677 +U+2678 +U+2679 +U+267A +U+267B +U+267C +U+267D +U+267E +U+267F +U+2680 +U+2681 +U+2682 +U+2683 +U+2684 +U+2685 +U+2686 +U+2687 +U+2688 +U+2689 +U+268A +U+268B +U+268C +U+268D +U+268E +U+268F +U+2690 +U+2691 +U+2692 +U+2693 +U+2694 +U+2695 +U+2696 +U+2697 +U+2698 +U+2699 +U+269A +U+269B +U+269C +U+269D +U+269E +U+269F +U+26A0 +U+26A1 +U+26A2 +U+26A3 +U+26A4 +U+26A5 +U+26A6 +U+26A7 +U+26A8 +U+26A9 +U+26AA +U+26AB +U+26AC +U+26AD +U+26AE +U+26AF +U+26B0 +U+26B1 +U+26B2 +U+26B3 +U+26B4 +U+26B5 +U+26B6 +U+26B7 +U+26B8 +U+26B9 +U+26BA +U+26BB +U+26BC +U+26BD +U+26BE +U+26BF +U+26C0 +U+26C1 +U+26C2 +U+26C3 +U+26C4 +U+26C5 +U+26C6 +U+26C7 +U+26C8 +U+26C9 +U+26CA +U+26CB +U+26CC +U+26CD +U+26CE +U+26CF +U+26D0 +U+26D1 +U+26D2 +U+26D3 +U+26D4 +U+26D5 +U+26D6 +U+26D7 +U+26D8 +U+26D9 +U+26DA +U+26DB +U+26DC +U+26DD +U+26DE +U+26DF +U+26E0 +U+26E1 +U+26E2 +U+26E3 +U+26E4 +U+26E5 +U+26E6 +U+26E7 +U+26E8 +U+26E9 +U+26EA +U+26EB +U+26EC +U+26ED +U+26EE +U+26EF +U+26F0 +U+26F1 +U+26F2 +U+26F3 +U+26F4 +U+26F5 +U+26F6 +U+26F7 +U+26F8 +U+26F9 +U+26FA +U+26FB +U+26FC +U+26FD +U+26FE +U+26FF +U+2700 +U+2701 +U+2702 +U+2703 +U+2704 +U+2705 +U+2706 +U+2707 +U+2708 +U+2709 +U+270A +U+270B +U+270C +U+270D +U+270E +U+270F +U+2710 +U+2711 +U+2712 +U+2713 +U+2714 +U+2715 +U+2716 +U+2717 +U+2718 +U+2719 +U+271A +U+271B +U+271C +U+271D +U+271E +U+271F +U+2720 +U+2721 +U+2722 +U+2723 +U+2724 +U+2725 +U+2726 +U+2727 +U+2728 +U+2729 +U+272A +U+272B +U+272C +U+272D +U+272E +U+272F +U+2730 +U+2731 +U+2732 +U+2733 +U+2734 +U+2735 +U+2736 +U+2737 +U+2738 +U+2739 +U+273A +U+273B +U+273C +U+273D +U+273E +U+273F +U+2740 +U+2741 +U+2742 +U+2743 +U+2744 +U+2745 +U+2746 +U+2747 +U+2748 +U+2749 +U+274A +U+274B +U+274C +U+274D +U+274E +U+274F +U+2750 +U+2751 +U+2752 +U+2753 +U+2754 +U+2755 +U+2756 +U+2757 +U+2758 +U+2759 +U+275A +U+275B +U+275C +U+275D +U+275E +U+275F +U+2760 +U+2761 +U+2762 +U+2763 +U+2764 +U+2765 +U+2766 +U+2767 +U+2768 +U+2769 +U+276A +U+276B +U+276C +U+276D +U+276E +U+276F +U+2770 +U+2771 +U+2772 +U+2773 +U+2774 +U+2775 +U+2776 +U+2777 +U+2778 +U+2779 +U+277A +U+277B +U+277C +U+277D +U+277E +U+277F +U+2780 +U+2781 +U+2782 +U+2783 +U+2784 +U+2785 +U+2786 +U+2787 +U+2788 +U+2789 +U+278A +U+278B +U+278C +U+278D +U+278E +U+278F +U+2790 +U+2791 +U+2792 +U+2793 +U+2794 +U+2795 +U+2796 +U+2797 +U+2798 +U+2799 +U+279A +U+279B +U+279C +U+279D +U+279E +U+279F +U+27A0 +U+27A1 +U+27A2 +U+27A3 +U+27A4 +U+27A5 +U+27A6 +U+27A7 +U+27A8 +U+27A9 +U+27AA +U+27AB +U+27AC +U+27AD +U+27AE +U+27AF +U+27B0 +U+27B1 +U+27B2 +U+27B3 +U+27B4 +U+27B5 +U+27B6 +U+27B7 +U+27B8 +U+27B9 +U+27BA +U+27BB +U+27BC +U+27BD +U+27BE +U+27BF +U+2934 +U+2935 +U+2B05 +U+2B06 +U+2B07 +U+2B1B +U+2B1C +U+2B50 +U+2B55 +U+3030 +U+303D +U+3297 +U+3299 diff --git a/level_0/f_utf/data/tests/codepoints/symbols-all.txt b/level_0/f_utf/data/tests/codepoints/symbol-all.txt similarity index 100% rename from level_0/f_utf/data/tests/codepoints/symbols-all.txt rename to level_0/f_utf/data/tests/codepoints/symbol-all.txt diff --git a/level_0/f_utf/tests/unit/c/data-utf.c b/level_0/f_utf/tests/unit/c/data-utf.c index 51b215d..3205e93 100644 --- a/level_0/f_utf/tests/unit/c/data-utf.c +++ b/level_0/f_utf/tests/unit/c/data-utf.c @@ -4,6 +4,41 @@ extern "C" { #endif +FILE *data__bytesequence_file_open__alphabetic(void) { + + return fopen("./data/tests/bytesequences/alphabetic-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__combining(void) { + + return fopen("./data/tests/bytesequences/combining-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__control(void) { + + return fopen("./data/tests/bytesequences/control-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__digit(void) { + + return fopen("./data/tests/bytesequences/digit-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__emoji(void) { + + return fopen("./data/tests/bytesequences/emoji-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__numeric(void) { + + return fopen("./data/tests/bytesequences/numeric-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__phonetic(void) { + + return fopen("./data/tests/bytesequences/phonetic-all.txt", "r"); +} + FILE *data__bytesequence_file_open__private(void) { return fopen("./data/tests/bytesequences/private-all.txt", "r"); @@ -14,9 +49,49 @@ FILE *data__bytesequence_file_open__punctuation(void) { return fopen("./data/tests/bytesequences/punctuation-all.txt", "r"); } -FILE *data__bytesequence_file_open__symbols(void) { +FILE *data__bytesequence_file_open__subscript(void) { + + return fopen("./data/tests/bytesequences/subscript-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__superscript(void) { + + return fopen("./data/tests/bytesequences/superscript-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__surrogate(void) { + + return fopen("./data/tests/bytesequences/superscript-surrogate.txt", "r"); +} + +FILE *data__bytesequence_file_open__symbol(void) { + + return fopen("./data/tests/bytesequences/symbol-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__valid(void) { + + return fopen("./data/tests/bytesequences/valid-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__whitespace(void) { + + return fopen("./data/tests/bytesequences/whitespace-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__wide(void) { + + return fopen("./data/tests/bytesequences/wide-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__word(void) { + + return fopen("./data/tests/bytesequences/word-all.txt", "r"); +} + +FILE *data__bytesequence_file_open__zero_width(void) { - return fopen("./data/tests/bytesequences/symbols-all.txt", "r"); + return fopen("./data/tests/bytesequences/zero_width-all.txt", "r"); } uint8_t data__bytesequence_get_line(FILE * const file, f_utf_char_t * const character) { diff --git a/level_0/f_utf/tests/unit/c/data-utf.h b/level_0/f_utf/tests/unit/c/data-utf.h index 411ef93..9b1b185 100644 --- a/level_0/f_utf/tests/unit/c/data-utf.h +++ b/level_0/f_utf/tests/unit/c/data-utf.h @@ -23,6 +23,111 @@ extern "C" { #endif /** + * Open the "alphabetic" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/alphabetic-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__alphabetic(void); + +/** + * Open the "combining" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/combining-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__combining(void); + +/** + * Open the "control" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/control-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__control(void); + +/** + * Open the "digit" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/digit-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__digit(void); + +/** + * Open the "emoji" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/emoji-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__emoji(void); + +/** + * Open the "numeric" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/numeric-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__numeric(void); + +/** + * Open the "phonetic" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/phonetic-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__phonetic(void); + +/** * Open the "private use area" bytesequence file. * * This assumes the following: @@ -53,11 +158,131 @@ extern FILE *data__bytesequence_file_open__private(void); extern FILE *data__bytesequence_file_open__punctuation(void); /** + * Open the "subscript" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/subscript-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__subscript(void); + +/** + * Open the "superscript" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/superscript-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__superscript(void); + +/** + * Open the "surrogate" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/surrogate-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__surrogate(void); + +/** * Open the "symbols" bytesequence file. * * This assumes the following: * - The file path is relative to the current working directory (tests are run from project root). - * - The file path is "data/tests/bytesequences/symbols-all.txt". + * - The file path is "data/tests/bytesequences/symbol-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__symbol(void); + +/** + * Open the "valid" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/valid-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__valid(void); + +/** + * Open the "whitespace" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/whitespace-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__whitespace(void); + +/** + * Open the "wide" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/wide-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__wide(void); + +/** + * Open the "word" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/word-all.txt". + * + * @return + * Non-zero on success. + * 0 on failure. + * + * @see fopen() + */ +extern FILE *data__bytesequence_file_open__word(void); + +/** + * Open the "zero_width" bytesequence file. + * + * This assumes the following: + * - The file path is relative to the current working directory (tests are run from project root). + * - The file path is "data/tests/bytesequences/zero_width-all.txt". * * @return * Non-zero on success. @@ -65,7 +290,7 @@ extern FILE *data__bytesequence_file_open__punctuation(void); * * @see fopen() */ -extern FILE *data__bytesequence_file_open__symbols(void); +extern FILE *data__bytesequence_file_open__zero_width(void); /** * Simple line reader that converts the line into a character. diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.c new file mode 100644 index 0000000..5e6751b --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_alphabetic.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_alphabetic__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__alphabetic(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_alphabetic(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.h new file mode 100644 index 0000000..1a56603 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_alphabetic.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_alphabetic_h +#define _TEST__F_utf_character_is_alphabetic_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_alphabetic() + */ +extern void test__f_utf_character_is_alphabetic__works(void **state); + +#endif // _TEST__F_utf_character_is_alphabetic_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_combining.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_combining.c new file mode 100644 index 0000000..1312e6f --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_combining.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_combining.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_combining__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__combining(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_combining(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_combining.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_combining.h new file mode 100644 index 0000000..30fa69d --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_combining.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_combining_h +#define _TEST__F_utf_character_is_combining_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_combining() + */ +extern void test__f_utf_character_is_combining__works(void **state); + +#endif // _TEST__F_utf_character_is_combining_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_control.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_control.c new file mode 100644 index 0000000..e40e1aa --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_control.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_control.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_control__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__control(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_control(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_control.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_control.h new file mode 100644 index 0000000..7e1e5f2 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_control.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_control_h +#define _TEST__F_utf_character_is_control_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_control() + */ +extern void test__f_utf_character_is_control__works(void **state); + +#endif // _TEST__F_utf_character_is_control_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_digit.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_digit.c new file mode 100644 index 0000000..507bb32 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_digit.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_digit.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_digit__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__digit(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_digit(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_digit.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_digit.h new file mode 100644 index 0000000..b78b070 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_digit.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_digit_h +#define _TEST__F_utf_character_is_digit_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_digit() + */ +extern void test__f_utf_character_is_digit__works(void **state); + +#endif // _TEST__F_utf_character_is_digit_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.c new file mode 100644 index 0000000..1ddbe2a --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_emoji.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_emoji__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__emoji(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_emoji(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.h new file mode 100644 index 0000000..e33dc0f --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_emoji.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_emoji_h +#define _TEST__F_utf_character_is_emoji_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_emoji() + */ +extern void test__f_utf_character_is_emoji__works(void **state); + +#endif // _TEST__F_utf_character_is_emoji_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.c new file mode 100644 index 0000000..dce0932 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_numeric.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_numeric__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__numeric(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_numeric(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.h new file mode 100644 index 0000000..5d94295 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_numeric.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_numeric_h +#define _TEST__F_utf_character_is_numeric_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_numeric() + */ +extern void test__f_utf_character_is_numeric__works(void **state); + +#endif // _TEST__F_utf_character_is_numeric_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.c new file mode 100644 index 0000000..6c2724c --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_phonetic.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_phonetic__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__phonetic(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_phonetic(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.h new file mode 100644 index 0000000..1fda9eb --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_phonetic.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_phonetic_h +#define _TEST__F_utf_character_is_phonetic_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_phonetic() + */ +extern void test__f_utf_character_is_phonetic__works(void **state); + +#endif // _TEST__F_utf_character_is_phonetic_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.c new file mode 100644 index 0000000..7fe409b --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_subscript.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_subscript__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__subscript(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_subscript(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.h new file mode 100644 index 0000000..0ea1b9a --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_subscript.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_subscript_h +#define _TEST__F_utf_character_is_subscript_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_subscript() + */ +extern void test__f_utf_character_is_subscript__works(void **state); + +#endif // _TEST__F_utf_character_is_subscript_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.c new file mode 100644 index 0000000..0757a47 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_superscript.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_superscript__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__superscript(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_superscript(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.h new file mode 100644 index 0000000..a15a4bf --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_superscript.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_superscript_h +#define _TEST__F_utf_character_is_superscript_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_superscript() + */ +extern void test__f_utf_character_is_superscript__works(void **state); + +#endif // _TEST__F_utf_character_is_superscript_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.c new file mode 100644 index 0000000..8a8d6a7 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_surrogate.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_surrogate__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__surrogate(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_surrogate(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.h new file mode 100644 index 0000000..b26f110 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_surrogate.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_surrogate_h +#define _TEST__F_utf_character_is_surrogate_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_surrogate() + */ +extern void test__f_utf_character_is_surrogate__works(void **state); + +#endif // _TEST__F_utf_character_is_surrogate_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_symbol.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_symbol.c index 75db136..9eccad6 100644 --- a/level_0/f_utf/tests/unit/c/test-utf-character_is_symbol.c +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_symbol.c @@ -8,7 +8,7 @@ extern "C" { void test__f_utf_character_is_symbol__works(void **state) { { - FILE *file = data__bytesequence_file_open__symbols(); + FILE *file = data__bytesequence_file_open__symbol(); assert_non_null(file); diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_valid.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_valid.c new file mode 100644 index 0000000..b2b426f --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_valid.c @@ -0,0 +1,69 @@ +#include "test-utf.h" +#include "test-utf-character_is_valid.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_valid__works(void **state) { + + for (uint32_t character = 0; character < UINT32_MAX; ++character) { + + const uint8_t first = macro_f_utf_char_t_to_char_1(character); + const uint8_t second = macro_f_utf_char_t_to_char_2(character); + const uint8_t third = macro_f_utf_char_t_to_char_3(character); + const uint8_t fourth = macro_f_utf_char_t_to_char_4(character); + + const f_status_t status = f_utf_character_is_valid(character); + + // Valid: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. + if ((first & 0b11111000) == 0b11111000) { + assert_false(status); + } + else if ((first & 0b11111000) == 0b11110000) { + if ((second & 0b11000000) == 0b10000000 && (third & 0b11000000) == 0b10000000 && (fourth & 0b11000000) == 0b10000000) { + assert_true(status); + } + else { + assert_false(status); + } + } + + // Valid: 1110xxxx 10xxxxxx 10xxxxxx 00000000. + else if ((first & 0b11110000) == 0b11100000) { + if ((second & 0b11000000) == 0b10000000 && (third & 0b11000000) == 0b10000000) { + assert_true(status); + } + else { + assert_false(status); + } + } + + // Valid: 110xxxxx 10xxxxxx 00000000 00000000. + else if ((first & 0b11100000) == 0b11000000) { + if ((second & 0b11000000) == 0b10000000) { + assert_true(status); + } + else { + assert_false(status); + } + } + + // Invalid (UTF Fragment): 10xxxxxx 00000000 00000000 00000000. + else if ((first & 0b11000000) == 0b10000000) { + assert_int_equal(status, F_status_set_error(F_utf_fragment)); + } + + // Valid: 0xxxxxxx 00000000 00000000 00000000. + else if (!(first & 0b10000000)) { + assert_true(status); + } + else { + assert_false(status); + } + } // for +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_valid.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_valid.h new file mode 100644 index 0000000..6e0c49c --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_valid.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_valid_h +#define _TEST__F_utf_character_is_valid_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_valid() + */ +extern void test__f_utf_character_is_valid__works(void **state); + +#endif // _TEST__F_utf_character_is_valid_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.c new file mode 100644 index 0000000..8df3e02 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_whitespace.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_whitespace__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__whitespace(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_whitespace(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.h new file mode 100644 index 0000000..4b51aa9 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_whitespace.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_whitespace_h +#define _TEST__F_utf_character_is_whitespace_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_whitespace() + */ +extern void test__f_utf_character_is_whitespace__works(void **state); + +#endif // _TEST__F_utf_character_is_whitespace_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_wide.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_wide.c new file mode 100644 index 0000000..aa06c90 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_wide.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_wide.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_wide__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__wide(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_wide(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_wide.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_wide.h new file mode 100644 index 0000000..0983925 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_wide.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_wide_h +#define _TEST__F_utf_character_is_wide_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_wide() + */ +extern void test__f_utf_character_is_wide__works(void **state); + +#endif // _TEST__F_utf_character_is_wide_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_word.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_word.c new file mode 100644 index 0000000..3b07e18 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_word.c @@ -0,0 +1,69 @@ +#include "test-utf.h" +#include "test-utf-character_is_word.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_word__strict_is_false(void **state) { + + { + FILE *file = data__bytesequence_file_open__word(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_word(character, F_false); + + // @todo provide an array of codes that should return false when not strict. + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +void test__f_utf_character_is_word__strict_is_true(void **state) { + + { + FILE *file = data__bytesequence_file_open__word(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_word(character, F_true); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_word.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_word.h new file mode 100644 index 0000000..c4be62a --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_word.h @@ -0,0 +1,27 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_word_h +#define _TEST__F_utf_character_is_word_h + +/** + * Test that the function works when strict is F_false. + * + * @see f_utf_character_is_word() + */ +extern void test__f_utf_character_is_word__strict_is_false(void **state); + +/** + * Test that the function works when strict is F_true. + * + * @see f_utf_character_is_word() + */ +extern void test__f_utf_character_is_word__strict_is_true(void **state); + +#endif // _TEST__F_utf_character_is_word_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.c b/level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.c new file mode 100644 index 0000000..11c477a --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.c @@ -0,0 +1,39 @@ +#include "test-utf.h" +#include "test-utf-character_is_zero_width.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_character_is_zero_width__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__zero_width(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const f_status_t status = f_utf_character_is_zero_width(character); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.h b/level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.h new file mode 100644 index 0000000..b54bb1c --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-character_is_zero_width.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_character_is_zero_width_h +#define _TEST__F_utf_character_is_zero_width_h + +/** + * Test that the function works. + * + * @see f_utf_character_is_zero_width() + */ +extern void test__f_utf_character_is_zero_width__works(void **state); + +#endif // _TEST__F_utf_character_is_zero_width_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.c b/level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.c new file mode 100644 index 0000000..656be86 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_alphabetic.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_alphabetic__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__alphabetic(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_alphabetic(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.h b/level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.h new file mode 100644 index 0000000..5c86107 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_alphabetic.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_alphabetic_h +#define _TEST__F_utf_is_alphabetic_h + +/** + * Test that the function works. + * + * @see f_utf_is_alphabetic() + */ +extern void test__f_utf_is_alphabetic__works(void **state); + +#endif // _TEST__F_utf_is_alphabetic_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_combining.c b/level_0/f_utf/tests/unit/c/test-utf-is_combining.c new file mode 100644 index 0000000..180b2bf --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_combining.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_combining.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_combining__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__combining(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_combining(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_combining.h b/level_0/f_utf/tests/unit/c/test-utf-is_combining.h new file mode 100644 index 0000000..5aded71 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_combining.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_combining_h +#define _TEST__F_utf_is_combining_h + +/** + * Test that the function works. + * + * @see f_utf_is_combining() + */ +extern void test__f_utf_is_combining__works(void **state); + +#endif // _TEST__F_utf_is_combining_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_control.c b/level_0/f_utf/tests/unit/c/test-utf-is_control.c new file mode 100644 index 0000000..fbdb61b --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_control.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_control.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_control__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__control(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_control(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_control.h b/level_0/f_utf/tests/unit/c/test-utf-is_control.h new file mode 100644 index 0000000..bac83d7 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_control.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_control_h +#define _TEST__F_utf_is_control_h + +/** + * Test that the function works. + * + * @see f_utf_is_control() + */ +extern void test__f_utf_is_control__works(void **state); + +#endif // _TEST__F_utf_is_control_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_digit.c b/level_0/f_utf/tests/unit/c/test-utf-is_digit.c new file mode 100644 index 0000000..fb3a48f --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_digit.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_digit.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_digit__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__digit(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_digit(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_digit.h b/level_0/f_utf/tests/unit/c/test-utf-is_digit.h new file mode 100644 index 0000000..fc048cb --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_digit.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_digit_h +#define _TEST__F_utf_is_digit_h + +/** + * Test that the function works. + * + * @see f_utf_is_digit() + */ +extern void test__f_utf_is_digit__works(void **state); + +#endif // _TEST__F_utf_is_digit_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_emoji.c b/level_0/f_utf/tests/unit/c/test-utf-is_emoji.c new file mode 100644 index 0000000..a2d26f3 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_emoji.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_emoji.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_emoji__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__emoji(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_emoji(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_emoji.h b/level_0/f_utf/tests/unit/c/test-utf-is_emoji.h new file mode 100644 index 0000000..4ad259d --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_emoji.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_emoji_h +#define _TEST__F_utf_is_emoji_h + +/** + * Test that the function works. + * + * @see f_utf_is_emoji() + */ +extern void test__f_utf_is_emoji__works(void **state); + +#endif // _TEST__F_utf_is_emoji_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_numeric.c b/level_0/f_utf/tests/unit/c/test-utf-is_numeric.c new file mode 100644 index 0000000..e0bd4dc --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_numeric.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_numeric.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_numeric__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__numeric(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_numeric(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_numeric.h b/level_0/f_utf/tests/unit/c/test-utf-is_numeric.h new file mode 100644 index 0000000..769f454 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_numeric.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_numeric_h +#define _TEST__F_utf_is_numeric_h + +/** + * Test that the function works. + * + * @see f_utf_is_numeric() + */ +extern void test__f_utf_is_numeric__works(void **state); + +#endif // _TEST__F_utf_is_numeric_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_phonetic.c b/level_0/f_utf/tests/unit/c/test-utf-is_phonetic.c new file mode 100644 index 0000000..e3bd806 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_phonetic.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_phonetic.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_phonetic__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__phonetic(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_phonetic(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_phonetic.h b/level_0/f_utf/tests/unit/c/test-utf-is_phonetic.h new file mode 100644 index 0000000..7aff26e --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_phonetic.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_phonetic_h +#define _TEST__F_utf_is_phonetic_h + +/** + * Test that the function works. + * + * @see f_utf_is_phonetic() + */ +extern void test__f_utf_is_phonetic__works(void **state); + +#endif // _TEST__F_utf_is_phonetic_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_subscript.c b/level_0/f_utf/tests/unit/c/test-utf-is_subscript.c new file mode 100644 index 0000000..0bf3ac1 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_subscript.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_subscript.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_subscript__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__subscript(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_subscript(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_subscript.h b/level_0/f_utf/tests/unit/c/test-utf-is_subscript.h new file mode 100644 index 0000000..1dcc89d --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_subscript.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_subscript_h +#define _TEST__F_utf_is_subscript_h + +/** + * Test that the function works. + * + * @see f_utf_is_subscript() + */ +extern void test__f_utf_is_subscript__works(void **state); + +#endif // _TEST__F_utf_is_subscript_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_superscript.c b/level_0/f_utf/tests/unit/c/test-utf-is_superscript.c new file mode 100644 index 0000000..1c7e418 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_superscript.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_superscript.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_superscript__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__superscript(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_superscript(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_superscript.h b/level_0/f_utf/tests/unit/c/test-utf-is_superscript.h new file mode 100644 index 0000000..5cdf8eb --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_superscript.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_superscript_h +#define _TEST__F_utf_is_superscript_h + +/** + * Test that the function works. + * + * @see f_utf_is_superscript() + */ +extern void test__f_utf_is_superscript__works(void **state); + +#endif // _TEST__F_utf_is_superscript_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_surrogate.c b/level_0/f_utf/tests/unit/c/test-utf-is_surrogate.c new file mode 100644 index 0000000..4807e12 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_surrogate.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_surrogate.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_surrogate__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__surrogate(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_surrogate(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_surrogate.h b/level_0/f_utf/tests/unit/c/test-utf-is_surrogate.h new file mode 100644 index 0000000..9e40807 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_surrogate.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_surrogate_h +#define _TEST__F_utf_is_surrogate_h + +/** + * Test that the function works. + * + * @see f_utf_is_surrogate() + */ +extern void test__f_utf_is_surrogate__works(void **state); + +#endif // _TEST__F_utf_is_surrogate_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_symbol.c b/level_0/f_utf/tests/unit/c/test-utf-is_symbol.c index 509198c..e4dd674 100644 --- a/level_0/f_utf/tests/unit/c/test-utf-is_symbol.c +++ b/level_0/f_utf/tests/unit/c/test-utf-is_symbol.c @@ -8,7 +8,7 @@ extern "C" { void test__f_utf_is_symbol__works(void **state) { { - FILE *file = data__bytesequence_file_open__symbols(); + FILE *file = data__bytesequence_file_open__symbol(); assert_non_null(file); diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_valid.c b/level_0/f_utf/tests/unit/c/test-utf-is_valid.c new file mode 100644 index 0000000..9e12eec --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_valid.c @@ -0,0 +1,72 @@ +#include "test-utf.h" +#include "test-utf-is_valid.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_valid__works(void **state) { + + for (uint32_t character = 0; character < UINT32_MAX; ++character) { + + const uint8_t first = macro_f_utf_char_t_to_char_1(character); + const uint8_t second = macro_f_utf_char_t_to_char_2(character); + const uint8_t third = macro_f_utf_char_t_to_char_3(character); + const uint8_t fourth = macro_f_utf_char_t_to_char_4(character); + + char buffer[5] = { first, second, third, fourth, 0 }; + + // This function only checks validity based on width and does not look at unknown data. + const f_status_t status = f_utf_is_valid(buffer, 5); + + // Valid: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. + if ((first & 0b11111000) == 0b11111000) { + assert_false(status); + } + else if ((first & 0b11111000) == 0b11110000) { + if ((second & 0b11000000) == 0b10000000 && (third & 0b11000000) == 0b10000000 && (fourth & 0b11000000) == 0b10000000) { + assert_true(status); + } + else { + assert_false(status); + } + } + + // Valid: 1110xxxx 10xxxxxx 10xxxxxx 00000000. + else if ((first & 0b11110000) == 0b11100000) { + if ((second & 0b11000000) == 0b10000000 && (third & 0b11000000) == 0b10000000) { + assert_true(status); + } + else { + assert_false(status); + } + } + + // Valid: 110xxxxx 10xxxxxx 00000000 00000000. + else if ((first & 0b11100000) == 0b11000000) { + if ((second & 0b11000000) == 0b10000000) { + assert_true(status); + } + else { + assert_false(status); + } + } + + // Invalid (UTF Fragment): 10xxxxxx 00000000 00000000 00000000. + else if ((first & 0b11000000) == 0b10000000) { + assert_int_equal(status, F_status_set_error(F_utf_fragment)); + } + + // Valid: 0xxxxxxx 00000000 00000000 00000000. + else if (!(first & 0b10000000)) { + assert_true(status); + } + else { + assert_false(status); + } + } // for +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_valid.h b/level_0/f_utf/tests/unit/c/test-utf-is_valid.h new file mode 100644 index 0000000..b8ae5e0 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_valid.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_valid_h +#define _TEST__F_utf_is_valid_h + +/** + * Test that the function works. + * + * @see f_utf_is_valid() + */ +extern void test__f_utf_is_valid__works(void **state); + +#endif // _TEST__F_utf_is_valid_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_whitespace.c b/level_0/f_utf/tests/unit/c/test-utf-is_whitespace.c new file mode 100644 index 0000000..5b4dc30 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_whitespace.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_whitespace.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_whitespace__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__whitespace(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_whitespace(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_whitespace.h b/level_0/f_utf/tests/unit/c/test-utf-is_whitespace.h new file mode 100644 index 0000000..a966d4b --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_whitespace.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_whitespace_h +#define _TEST__F_utf_is_whitespace_h + +/** + * Test that the function works. + * + * @see f_utf_is_whitespace() + */ +extern void test__f_utf_is_whitespace__works(void **state); + +#endif // _TEST__F_utf_is_whitespace_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_wide.c b/level_0/f_utf/tests/unit/c/test-utf-is_wide.c new file mode 100644 index 0000000..f9882ef --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_wide.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_wide.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_wide__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__wide(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_wide(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_wide.h b/level_0/f_utf/tests/unit/c/test-utf-is_wide.h new file mode 100644 index 0000000..542d1c2 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_wide.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_wide_h +#define _TEST__F_utf_is_wide_h + +/** + * Test that the function works. + * + * @see f_utf_is_wide() + */ +extern void test__f_utf_is_wide__works(void **state); + +#endif // _TEST__F_utf_is_wide_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_word.c b/level_0/f_utf/tests/unit/c/test-utf-is_word.c new file mode 100644 index 0000000..b572408 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_word.c @@ -0,0 +1,103 @@ +#include "test-utf.h" +#include "test-utf-is_word.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_word__strict_is_false(void **state) { + + { + FILE *file = data__bytesequence_file_open__word(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_word(buffer, F_false, 5); + + // @todo provide an array of codes that should return false when not strict. + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +void test__f_utf_is_word__strict_is_true(void **state) { + + { + FILE *file = data__bytesequence_file_open__word(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_word(buffer, F_true, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_word.h b/level_0/f_utf/tests/unit/c/test-utf-is_word.h new file mode 100644 index 0000000..7a838b6 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_word.h @@ -0,0 +1,27 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_word_h +#define _TEST__F_utf_is_word_h + +/** + * Test that the function works when strict is F_false. + * + * @see f_utf_is_word() + */ +extern void test__f_utf_is_word__strict_is_false(void **state); + +/** + * Test that the function works when strict is F_true. + * + * @see f_utf_is_word() + */ +extern void test__f_utf_is_word__strict_is_true(void **state); + +#endif // _TEST__F_utf_is_word_h diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_zero_width.c b/level_0/f_utf/tests/unit/c/test-utf-is_zero_width.c new file mode 100644 index 0000000..6087717 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_zero_width.c @@ -0,0 +1,56 @@ +#include "test-utf.h" +#include "test-utf-is_zero_width.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void test__f_utf_is_zero_width__works(void **state) { + + { + FILE *file = data__bytesequence_file_open__zero_width(); + + assert_non_null(file); + + f_utf_char_t character = 0; + int8_t bytes = 0; + + f_array_length_t line = 0; + + do { + bytes = data__bytesequence_get_line(file, &character); + + if (bytes) { + const uint8_t width = macro_f_utf_char_t_width(character); + char buffer[5] = { 0, 0, 0, 0, 0 }; + + buffer[0] = macro_f_utf_char_t_to_char_1(character); + + if (width > 1) { + buffer[1] = macro_f_utf_char_t_to_char_2(character); + + if (width > 2) { + buffer[2] = macro_f_utf_char_t_to_char_3(character); + + if (width > 3) { + buffer[3] = macro_f_utf_char_t_to_char_4(character); + } + } + } + + const f_status_t status = f_utf_is_zero_width(buffer, 5); + + assert_true(status); + } + + ++line; + + } while (bytes > 0); + + fclose(file); + } +} + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_0/f_utf/tests/unit/c/test-utf-is_zero_width.h b/level_0/f_utf/tests/unit/c/test-utf-is_zero_width.h new file mode 100644 index 0000000..5528226 --- /dev/null +++ b/level_0/f_utf/tests/unit/c/test-utf-is_zero_width.h @@ -0,0 +1,20 @@ +/** + * FLL - Level 0 + * + * Project: UTF + * API Version: 0.5 + * Licenses: lgpl-2.1-or-later + * + * Test the function in the utf project. + */ +#ifndef _TEST__F_utf_is_zero_width_h +#define _TEST__F_utf_is_zero_width_h + +/** + * Test that the function works. + * + * @see f_utf_is_zero_width() + */ +extern void test__f_utf_is_zero_width__works(void **state); + +#endif // _TEST__F_utf_is_zero_width_h diff --git a/level_0/f_utf/tests/unit/c/test-utf.c b/level_0/f_utf/tests/unit/c/test-utf.c index 0044053..c091697 100644 --- a/level_0/f_utf/tests/unit/c/test-utf.c +++ b/level_0/f_utf/tests/unit/c/test-utf.c @@ -24,9 +24,25 @@ int main(void) { cmocka_unit_test(test__f_utf_append_assure_nulless__works), cmocka_unit_test(test__f_utf_append_nulless__works), + //cmocka_unit_test(test__f_utf_character_is_alphabetic__works), + //cmocka_unit_test(test__f_utf_character_is_combining__works), + cmocka_unit_test(test__f_utf_character_is_control__works), + cmocka_unit_test(test__f_utf_character_is_digit__works), + cmocka_unit_test(test__f_utf_character_is_emoji__works), + //cmocka_unit_test(test__f_utf_character_is_numeric__works), cmocka_unit_test(test__f_utf_character_is_private__works), cmocka_unit_test(test__f_utf_character_is_punctuation__works), + //cmocka_unit_test(test__f_utf_character_is_subscript__works), + //cmocka_unit_test(test__f_utf_character_is_superscript__works), + //cmocka_unit_test(test__f_utf_character_is_surrogate__works), cmocka_unit_test(test__f_utf_character_is_symbol__works), + cmocka_unit_test(test__f_utf_character_is_valid__works), + //cmocka_unit_test(test__f_utf_character_is_whitespace__works), + //cmocka_unit_test(test__f_utf_character_is_wide__works), + //cmocka_unit_test(test__f_utf_character_is_zero_width__works), + + //cmocka_unit_test(test__f_utf_character_is_word__strict_is_false), + //cmocka_unit_test(test__f_utf_character_is_word__strict_is_true), cmocka_unit_test(test__f_utf_dynamic_adjust__works), @@ -116,9 +132,25 @@ int main(void) { cmocka_unit_test(test__f_utf_dynamicss_increase_by__works), cmocka_unit_test(test__f_utf_dynamicss_resize__works), + //cmocka_unit_test(test__f_utf_is_alphabetic__works), + //cmocka_unit_test(test__f_utf_is_combining__works), + cmocka_unit_test(test__f_utf_is_control__works), + cmocka_unit_test(test__f_utf_is_digit__works), + cmocka_unit_test(test__f_utf_is_emoji__works), + //cmocka_unit_test(test__f_utf_is_numeric__works), cmocka_unit_test(test__f_utf_is_private__works), cmocka_unit_test(test__f_utf_is_punctuation__works), + //cmocka_unit_test(test__f_utf_is_subscript__works), + //cmocka_unit_test(test__f_utf_is_superscript__works), + //cmocka_unit_test(test__f_utf_is_surrogate__works), cmocka_unit_test(test__f_utf_is_symbol__works), + cmocka_unit_test(test__f_utf_is_valid__works), + //cmocka_unit_test(test__f_utf_is_whitespace__works), + //cmocka_unit_test(test__f_utf_is_wide__works), + //cmocka_unit_test(test__f_utf_is_zero_width__works), + + //cmocka_unit_test(test__f_utf_is_word__strict_is_false), + //cmocka_unit_test(test__f_utf_is_word__strict_is_true), cmocka_unit_test(test__f_utf_map_multis_adjust__works), cmocka_unit_test(test__f_utf_map_multis_append__works), diff --git a/level_0/f_utf/tests/unit/c/test-utf.h b/level_0/f_utf/tests/unit/c/test-utf.h index fbb37fb..5d7bdbf 100644 --- a/level_0/f_utf/tests/unit/c/test-utf.h +++ b/level_0/f_utf/tests/unit/c/test-utf.h @@ -33,9 +33,24 @@ #include "test-utf-append_assure.h" #include "test-utf-append_assure_nulless.h" #include "test-utf-append_nulless.h" +#include "test-utf-character_is_alphabetic.h" +#include "test-utf-character_is_combining.h" +#include "test-utf-character_is_control.h" +#include "test-utf-character_is_digit.h" +#include "test-utf-character_is_emoji.h" +#include "test-utf-character_is_numeric.h" +#include "test-utf-character_is_phonetic.h" #include "test-utf-character_is_private.h" #include "test-utf-character_is_punctuation.h" +#include "test-utf-character_is_subscript.h" +#include "test-utf-character_is_superscript.h" +#include "test-utf-character_is_surrogate.h" #include "test-utf-character_is_symbol.h" +#include "test-utf-character_is_valid.h" +#include "test-utf-character_is_whitespace.h" +#include "test-utf-character_is_wide.h" +#include "test-utf-character_is_word.h" +#include "test-utf-character_is_zero_width.h" #include "test-utf-dynamic_adjust.h" #include "test-utf-dynamic_append.h" #include "test-utf-dynamic_append_assure.h" @@ -87,9 +102,24 @@ #include "test-utf-dynamicss_increase.h" #include "test-utf-dynamicss_increase_by.h" #include "test-utf-dynamicss_resize.h" +#include "test-utf-is_alphabetic.h" +#include "test-utf-is_combining.h" +#include "test-utf-is_control.h" +#include "test-utf-is_digit.h" +#include "test-utf-is_emoji.h" +#include "test-utf-is_numeric.h" +#include "test-utf-is_phonetic.h" #include "test-utf-is_private.h" #include "test-utf-is_punctuation.h" +#include "test-utf-is_subscript.h" +#include "test-utf-is_superscript.h" +#include "test-utf-is_surrogate.h" #include "test-utf-is_symbol.h" +#include "test-utf-is_valid.h" +#include "test-utf-is_whitespace.h" +#include "test-utf-is_wide.h" +#include "test-utf-is_word.h" +#include "test-utf-is_zero_width.h" #include "test-utf-map_multis_adjust.h" #include "test-utf-map_multis_append.h" #include "test-utf-map_multis_append_all.h" -- 1.8.3.1