summaryrefslogtreecommitdiff
path: root/tests/common/test_utf8.c
blob: 58bfe9d43b950445f2f5d8c27463dbdcf6ee661b (plain)
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
#include "common/utf8.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char latin1[256];
    for (int i = 1; i <= 255; i++) latin1[i - 1] = (char)i;
    latin1[255] = '\0';
    size_t len = 0, back_len = 0;
    char *utf8 = yasl_private_utf8_from_latin1(latin1, 255, &len);
    assert(utf8 && yasl_private_utf8_validate(utf8, len));
    char *back = yasl_private_utf8_to_latin1(utf8, &back_len);
    assert(back && back_len == 255 && memcmp(back, latin1, 256) == 0);
    free(back);
    free(utf8);
    assert(!yasl_private_utf8_to_latin1("😀", &len));
    assert(!yasl_private_utf8_to_latin1("\xc3", &len));
    assert(!yasl_private_utf8_validate("\xc3", 1));
    assert(!yasl_private_utf8_validate("\xe2\x82", 2));
    assert(!yasl_private_utf8_validate("\xf0\x9f\x98", 3));
    assert(!yasl_private_utf8_validate("\xed\xa0\x80", 3)); /* Surrogate. */
    assert(yasl_private_utf8_validate("😀", sizeof("😀") - 1));
    assert(yasl_private_utf8_validate(NULL, 0));
    return 0;
}