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.
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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
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");
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) {
#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:
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.
*
* @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.
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
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);
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
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);
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
--- /dev/null
+#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
--- /dev/null
+/**
+ * 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
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),
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),
#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"
#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"