summaryrefslogtreecommitdiff
path: root/main.c
blob: bb49399bcfe5af98a48595864da09835f7de3251 (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
28
29
30
31
32
33
34
35
36
37
38
#include <assert.h>
#include <string.h>

#include <multibytecodec.h>

int main()
{
    MultibyteCodecState state;
    char hello[] = "\xc4\xe3\xba\xc3";
    ucs4_t expected[] = { 0x4f60, 0x597d, 0x0};
    ucs4_t result[3];
    const char* inp;
    ucs4_t *outp;
    int ret;

    ret = mbcs_init(&state, "cn", "gbk");
    assert (ret == 0);

    inp = hello;
    outp = result;

    ret = mbcs_decode(&state, &inp, 3, &outp, 3);
    assert (ret == MBERR_TOOFEW);

    inp = hello;
    outp = result;
    ret = mbcs_decode(&state, &inp, 4, &outp, 1);
    assert (ret == MBERR_TOOSMALL);

    inp = hello;
    outp = result;
    ret = mbcs_decode(&state, &inp, 4, &outp, 3);
    assert (ret == 0);

    assert(!memcmp(result, expected, sizeof(ucs4_t) * 2));

    return 0;
}