jinyedge's note
{http://www.jinyedge.pe.kr}


Hi, this is jinyedge. I'm a software developer. I hope you can find some useful information in my homepage.


jinyedge at gmail.com
Since 2001.12.05

 

 
Subj Cont
 
Subj: C, edgelib.h, edgelib.c
Mtime: 2010-06-23 00:06:04
File1: edgelib_test.tgz, 8KB

/*
- Author: jinyedge
- Comment:
*/

#include <stdio.h>
#include <assert.h>
#include "edgelib.h"

//---------------------------------------------------------------------
typedef struct{
    char* name;
    int age;
    char* job;
} User;


//---------------------------------------------------------------------
User* user_new(char* name, int age, char* job){
    User* u = (User*)malloc(sizeof(User));
    u->name = strdup(name);
    u->age = age;
    u->job = strdup(job);
    return u;
}

//---------------------------------------------------------------------
void user_free(User* u){
    if(!u){
        return;
    }
    
    if(u->name){
        free(u->name);
        u->name = NULL;
    }

    if(u->job){
        free(u->job);
        u->job = NULL;
    }

    free(u);
}

//------------------------------------------------------------------------
int user_cmp(const void* v1, const void* v2){
    return strcmp((*(User**)v1)->name, (*(User**)v2)->name);
}

//---------------------------------------------------------------------
void string_functions(){
    char* line = "This is a test..";
    char buf[1024], rbuf[1024];
    int res = 0;
    char* pline;

    puts("** string_functions() **");

    // Duplicate a string.
    pline = pstr_dup(line);
    puts(pline);
    free(pline);

    // String upper, lower.
    puts("");
    
    str_upper(line, buf);
    puts(buf);

    str_lower(line, buf);
    puts(buf);

    // Reverse string.
    puts("");
    
    str_rev(line, buf);
    puts(buf);

    // Check string with str_starts_with.
    res = str_starts_with(line, "This");
    assert(res == 1);

    // String index.
    puts("");
    
    res = str_index(line, "s");
    printf("str_index for `s` = %d\n", res);

    res = str_rindex(line, "s");
    printf("str_rindex for `s = %d\n", res);

    // Trim.
    puts("");
    
    sprintf(buf, "    %s   ", line);
    printf("Before trimed: %s, hehe..\n", buf);

    trim(buf, rbuf);
    printf("After trimed: %s, hehe..\n", rbuf);

    // Replace.
    puts("");
    
    replace(line, "his", "kkk", buf);
    puts(buf);

    pline = preplace(line, "kkk", "his");
    puts(pline);
    free(pline);


    strcpy(buf, "ADSFG");
    puts(buf);
    str_lower(buf, buf);
    puts(buf);

    // Check string with is_numeric.
    res = is_numeric(line);
    assert(res == 0);
}

//---------------------------------------------------------------------
void string_list_functions(){
    int i;
    char buf[1024], buf2[1024];
    StringList* list;
    StringList* list2;

    puts("\n** string_list_functions() **");

    list = string_list_new();

    string_list_add(list, "123");
    string_list_add(list, "456");
    string_list_add(list, "789");

    printf("length: %d\n", list->length);
    puts("data:");

    for(i = 0; i < list->length; i++){
        puts(list->arr[i]);
    }

    // Join, Replace, Split.
    puts("");

    join(list, "++", buf);
    printf("join: %s\n", buf);
    
    replace(buf, "++", "--", buf2);
    printf("replace: %s\n", buf2);
    
    puts("split:");
    list2 = split(buf2, "--");
    for(i = 0; i < list2->length; i++){
        puts(list2->arr[i]);
    }

    // Reverse sorting.
    puts("");

    puts("string_list_rsort:");

    string_list_rsort(list);
    for(i = 0; i < list->length; i++){
        puts(list->arr[i]);
    }

    string_list_free(list);
    string_list_free(list2);
}

//---------------------------------------------------------------------
void string_map_functions(){
    StringMap* map;
    char buf[256];

    puts("\n** string_map_functions() **");
    map = string_map_new();

    string_map_add(map, "no", "1");
    string_map_add(map, "name", "jinyedge");
    string_map_add(map, "job", "developer");

    string_map_val(map, "name", buf);
    printf("name = %s\n", buf);

    string_map_add(map, "name", "gazami");

    string_map_val(map, "name", buf);
    printf("name = %s\n", buf);

    puts("");
    string_map_print_all(map);

    string_map_free(map);
}

//---------------------------------------------------------------------
void file_functions(){
    int res, i;
    size_t size;
    char* filename = "/usr/local/test/imsi.txt";
    char buf[1024];

    puts("\n** file_functions() **");

    // Check file with file_exists and file_size.
    res = file_exists("./edgelib.h");
    assert(res == 1);

    size = file_size("./edgelib.h");
    printf("get_file_size(\"./edgelib.h\") = %ul\n", size);

    // Parsing filename.
    puts("");

    printf("filename: %s\n", filename);

    file_dirname(filename, buf);
    printf("file_dirname: %s\n", buf);

    file_basename(filename, buf);
    printf("file_basename: %s\n", buf);

    file_extension(filename, buf);
    printf("file_extenstion: %s\n", buf);

    // Read lines from file.
    puts("");

    StringList* list = read_text_file2("./edgelib.h", 0);
    printf("number of lines: %d\n", list->length);

    for(i = 0; i < list->length && i < 5; i++){
        trim(list->arr[i], buf);
        printf("%d: %s\n", i, buf);
    }
    string_list_free(list);
}

//---------------------------------------------------------------------
void time_functions(){
    char buf[1024];

    puts("\n** time_functions() **");
    
    str_ftime("%Y-%m-%d %H:%M:%S", buf, 1024);
    printf("str_ftime: %s\n", buf);
}

//---------------------------------------------------------------------
void misc_functions(){
    char buf[1024 * 8];

    puts("\n** misc_functions() **");
    
    exbin("ls -la", buf, 1024 * 8);
    puts("ls -la:");
    puts(buf);
}

//---------------------------------------------------------------------
void test_bsearch(){
    int i;
    StringList* list;

    puts("\n** test_bsearch() **");

    list = string_list_new();

    string_list_add(list, "1");
    string_list_add(list, "9");
    string_list_add(list, "dd");
    string_list_add(list, "2");
    string_list_add(list, "PP");
    string_list_add(list, "kk");
    string_list_add(list, "6");
    string_list_add(list, "pp");
    string_list_add(list, "4");
    string_list_add(list, "6");
    string_list_add(list, "7");

    string_list_sort(list);
    string_list_print_all(list);

    if(string_list_find(list, "pp")){
        puts("Found!");
    }
    else{
        puts("not found!");
    }

    string_list_clear(list);
    string_list_add(list, "1");
    string_list_add(list, "9");
    string_list_add(list, "dd");
    string_list_print_all(list);

    string_list_free(list);
}

//---------------------------------------------------------------------
void test_string_list_map_resize(){
    int i;
    StringList* list;
    StringMap* map;
    char buf[20];

    puts("\n** test_string_list_map_resize() **");

    list = string_list_new();
    map = string_map_new();

    printf("list->length = %d, list->_size = %d\n", list->length, list->_size);
    printf("map->length = %d, map->_size = %d\n", map->list->length, map->list->_size);

    for(i = 0; i < 1200; i++){
        sprintf(buf, "%d", i);
        string_list_add(list, buf);
        string_map_add(map, buf, "1");
    }

    string_list_print_all(list);

    printf("list->length = %d, list->_size = %d\n", list->length, list->_size);
    printf("map->length = %d, map->_size = %d\n", map->list->length, map->list->_size);

    printf("map->length = %d, map->_size = %d\n", map->list->length, map->list->_size);
    printf("map->length = %d, map->_size = %d\n", map->list->length, map->list->_size);
    printf("map->length = %d, map->_size = %d\n", map->list->length, map->list->_size);
    string_list_free(list);
    string_map_free(map);
}

//---------------------------------------------------------------------
void test_string_list_shift(){
    StringList* list;
    char* s;

    puts("\n** test_string_list_map_resize() **");

    list = string_list_new();

    string_list_add(list, "1");
    string_list_add(list, "9");
    string_list_add(list, "dd");
    string_list_add(list, "2");
    string_list_add(list, "PP");

    s = string_list_shift(list);
    puts(s);

    s = string_list_shift(list);
    puts(s);

    puts("");
    string_list_print_all(list);

    string_list_free(list);
}

//---------------------------------------------------------------------
void print_all_user(VoidList* list){
    int i;
    VoidPair* vp;
    User* u;
    char* kw;
    for(i = 0; i < list->length; i++){
        vp = (VoidPair*)list->arr[i];
        kw = vp->kw;
        u = (User*)vp->val;

        printf("kw = %s, u->name = %s, u->age = %d, u->job = %s\n"
            , kw, u->name, u->age, u->job);
    }
}

//---------------------------------------------------------------------
void free_all_user(VoidList* list){
    int i;
    VoidPair* vp;
    User* u;
    char* kw;
    for(i = 0; i < list->length; i++){
        if(!list->arr[i]){
            continue;
        }

        vp = (VoidPair*)list->arr[i];

        u = (User*)vp->val;
        user_free(u);
    }
}

//---------------------------------------------------------------------
void print_user_list(VoidList* list){
    int i;
    User* u;
    char* kw;
    for(i = 0; i < list->length; i++){
        u = (User*)list->arr[i];

        printf("%d, u->name = %s, u->age = %d, u->job = %s\n"
            , i, u->name, u->age, u->job);
    }

    printf("list->length = %d, list->_size = %d\n", list->length, list->_size);
}

//---------------------------------------------------------------------
void user_free_void(void* v){
    User* u = (User*)v;

    if(!u){
        return;
    }

    if(u->name){
        free(u->name);
        u->name = NULL;
    }

    if(u->job){
        free(u->job);
        u->job = NULL;
    }

    free(u);
}

//---------------------------------------------------------------------
void test_void_list(){
    puts("\n** test_void_list() **");

    VoidList* list = void_list_new(user_free_void);

    void_list_add(list, user_new("xabq", 31, "developer"));
    void_list_add(list, user_new("xgbq", 33, "developer"));
    void_list_add(list, user_new("xakwxd1", 23, "developer"));
    void_list_add(list, user_new("gbq", 53, "clerk"));
    void_list_add(list, user_new("bbq", 37, "developer"));
    void_list_add(list, user_new("123abq", 31, "developer"));
    void_list_add(list, user_new("gbq", 33, "developer"));
    void_list_add(list, user_new("bdbq", 37, "developer"));
    void_list_add(list, user_new("kxd1", 23, "developer"));
    void_list_add(list, user_new("gbq", 33, "developer"));
    void_list_add(list, user_new("bdbq", 37, "developer"));
    void_list_add(list, user_new("abq", 31, "developer"));
    void_list_add(list, user_new("gbq", 33, "developer"));
    void_list_add(list, user_new("akwxd1", 23, "developer"));
    void_list_add(list, user_new("gbq", 53, "clerk"));

    void_list_sort(list, user_cmp);

    print_user_list(list);

    void_list_free(list);
}

//---------------------------------------------------------------------
void test_void_map(){
    puts("\n** test_void_map() **");

    VoidMap* map = void_map_new(user_free_void);

    void_map_add(map, "bbq", user_new("bbq", 37, "developer"));
    void_map_add(map, "kxd1", user_new("kxd1", 23, "developer"));
    void_map_add(map, "abq", user_new("abq", 31, "developer"));
    void_map_add(map, "gbq", user_new("gbq", 33, "developer"));
    void_map_add(map, "gbq", user_new("bbq", 37, "developer"));
    void_map_add(map, "gbq", user_new("gbq", 53, "clerk"));
    void_map_add(map, "abq", user_new("gbq", 53, "clerk"));

    print_all_user(map->list);

    User* temp = (User*)void_map_val(map, "bbq");
    printf("name = %s, age = %d\n", temp->name, temp->age);

    puts("\nPrint kw_list of a void map.");
    int i = 0;
    for(i = 0; i < map->kw_list->length; i++){
        puts(map->kw_list->arr[i]);
    }

    void_map_free(map);
}

//---------------------------------------------------------------------
void read_conf_file(){
    puts("\n** read_conf_file() **");

    StringList* list = read_text_file2("proxy.cfg", 0);

    int i;
    char kw[255], val[255];
    StringList* kv_list;
    for(i = 0; i < list->length; i++){
        kv_list = split(list->arr[i], "=");

        if(kv_list->length != 2){
            string_list_free(kv_list);
            continue;
        }
        
        trim(kv_list->arr[0], kw);
        trim(kv_list->arr[1], val);
        string_list_free(kv_list);

        printf("%s = %s\n", kw, val);
    }

    string_list_free(list);
}

//---------------------------------------------------------------------
void test_split_by_space(){
    puts("\n** split_by_space() **");

    char* line = "123 456 kkk   454        ==--";

    StringList* list = split_by_space(line);
    string_list_print_all(list);

    string_list_free(list);
}

//---------------------------------------------------------------------
int main(int argc, char *argv[]){
    string_functions();
    string_list_functions();
    file_functions();
    time_functions();

    misc_functions();
    string_map_functions();
    test_bsearch();
    test_string_list_map_resize();
    
    test_string_list_shift();
    test_void_list();
    test_void_map();
    read_conf_file();

    test_split_by_space();

    return 0;
}