summaryrefslogtreecommitdiff
path: root/tests/test_thinp.c
blob: cc4ba7dec53fcc219af2a4bff8d562c134c3a2b6 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
 * test_thinp.c : Test suite for <thai/thinp.h> functions
 * Created: 2001-08-09
 * Author:  Theppitak Karoonboonyanan
 */

#include <thai/thinp.h>
#include <string.h>
#include <stdio.h>

const thchar_t test_keys[] = "¹éÓ¹Óé¡Õè¡èÕ¡Øè¡èØ¡Øì¡ìØ¡Ôì¡ìÔàÔàÓàé¹ÔìѹìѹØèÔ¹ÒìÄÒÆÒ";
const thchar_t res_level0[] = "¹éÓ¹Óé¡Õè¡èÕ¡Øè¡èØ¡Øì¡ìØ¡Ôì¡ìÔàÔàÓàé¹ÔìѹìѹØèÔ¹ÒìÄÒÆÒ";
const thchar_t res_level1[] = "¹éÓ¹Ó¡Õè¡è¡Øè¡è¡Øì¡ì¡Ôì¡ìààÓà¹Ôì¹ì¹Øè¹ÒÄÒÆÒ";
const thchar_t res_level2[] = "¹éÓ¹Ó¡Õè¡è¡Øè¡è¡Øì¡ì¡Ôì¡ìà¹Ôì¹ì¹Øè¹ÒÄ";
const thchar_t res_validate[] = "¹éÓ¹éÓ¡Õè¡Õè¡Øè¡Øè¡Øì¡Øì¡Ôì¡Ôìà¹Ñ¹Ñ¹Ôè¹ÒÄåÆå";

static int test_simple_input(const thchar_t keys[],
                             const thchar_t ans[], int level)
{
    thchar_t buffer[80];
    int      cur_pos = 0;
    int      err_no = 0;

    while (*keys) {
        thchar_t prev_c = cur_pos ? buffer[cur_pos-1] : 0;
        if (th_isaccept(prev_c, *keys, level)) {
            buffer[cur_pos++] = *keys;
        }
        ++keys;
    }
    buffer[cur_pos] = 0;

    err_no = strcmp((const char*)buffer, (const char*)ans);
    if (err_no != 0) {
        fprintf(stderr, "(%s)!=(%s)\n", buffer, ans);
    }
    return err_no;
}

static int test_th_isaccept()
{
    int err_no = 0;

    err_no += test_simple_input(test_keys, res_level0, 0);
    err_no += test_simple_input(test_keys, res_level1, 1);
    err_no += test_simple_input(test_keys, res_level2, 2);

    return err_no;
}

static int test_th_validate()
{
    int      err_no = 0;
    thchar_t buffer[80];
    int      cur_pos = 0;
    const thchar_t *keys = test_keys;

    while (*keys) {
        struct thcell_t prev_cell;
        struct thinpconv_t conv;

        th_prev_cell(buffer, cur_pos, &prev_cell, 1);
        if (th_validate(prev_cell, *keys, &conv)) {
            strcpy(&buffer[cur_pos + conv.offset], conv.conv);
            cur_pos += conv.offset + strlen(conv.conv);
        }
        ++keys;
    }
    buffer[cur_pos] = 0;

    err_no = strcmp((const char*)buffer, (const char*)res_validate);
    if (err_no != 0) {
        fprintf(stderr, "(%s)!=(%s)\n", buffer, res_validate);
    }

    return err_no;
}

int main()
{
    int err_no = 0;

    err_no += test_th_isaccept();
    err_no += test_th_validate();

    return err_no ? 1 : 0;
}