⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i18nmb.c

📁 eCos/RedBoot for勤研ARM AnywhereII(4510) 含全部源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//=================================================================
//
//        i18nmb.c
//
//        General testcase for C library multibyte functions
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s):     jjohnstn
// Contributors:  
// Date:          2000-11-24
// Description:   Contains general testcode for C library multibyte character functions
//
//
//####DESCRIPTIONEND####

// INCLUDES

#include <pkgconf/libc_i18n.h>     // Configuration header
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
#include <cyg/infra/testcase.h>
#include <string.h>

// FUNCTIONS

int
main( int argc, char *argv[] )
{

#ifdef CYGFUN_LIBC_I18N_LOCALE_C_JIS
  unsigned char in_jis[] =
    "abcd\x1b$B\x23\x25\x45\x46\x1b(B23";
  unsigned char fmt_jis[] = 
    "abcd\x1b$B\x23\x25\x45\x46\x1b(B%d";
  
  unsigned char * testjis[] = { 
    "abcd\x1b$B\x23\x25\x45\x46\x1b(B",
    "abcd\x1b$B\x23\x25\x1b(Befg",
    "\x1b$B\x23\x7f\x1b(B",
    "\x1b$B\x44\x45\x46\x1b(B",
    "\x1b$B",
    "\x1b$B\x1b(B",
    "\x1b$B\x44\x45",
  };

  int mblenjis0[] = { 1, 1, 1, 1, 5, 5, 0};
  int mblenjis1[] = { 1, 1, 1, 1, 8, 1, 1, 1, 0 };
  int mblenjis2[] = { -1 };
  int mblenjis3[] = { 5, -1 };
  int mblenjis4[] = { -1 };
  int mblenjis5[] = { -1 };
  int mblenjis6[] = { -1 };

  int *mblenjis[] = {
    mblenjis0,
    mblenjis1,
    mblenjis2,
    mblenjis3,
    mblenjis4,
    mblenjis5,
    mblenjis6,
  };

  wchar_t mbtowcjis0[] = { 
    (wchar_t)'a', 
    (wchar_t)'b',
    (wchar_t)'c',
    (wchar_t)'d',
    (wchar_t)0x2325,
    (wchar_t)0x4546,
    (wchar_t)0
  };
#endif /* CYGFUN_LIBC_I18N_LOCALE_C_JIS */

#ifdef CYGFUN_LIBC_I18N_LOCALE_C_SJIS
  unsigned char in_sjis[] = 
    "ab\x81\x40\x9f\x7e\xe0\x80\xef\xfcgh23";
  unsigned char fmt_sjis[] = 
    "ab\x81\x40\x9f\x7e\xe0\x80\xef\xfcgh%d";

  unsigned char * testsjis[] = {
    "ab\x81\x40\x9f\x7e\xe0\x80\xef\xfcgh",
    "\x80\x40",
    "\xa0\x40",
    "\xdf\x40",
    "\xf0\x40",
    "\x84\x3f",
    "\x85\x7f",
    "\x86\xfd",
    "\x81",
  };

  int mblensjis0[] = { 1, 1, 2, 2, 2, 2, 1, 1, 0};
  int mblensjis1[] = { 1, 1, 0 };
  int mblensjis2[] = { 1, 1, 0 };
  int mblensjis3[] = { 1, 1, 0 };
  int mblensjis4[] = { 1, 1, 0 };
  int mblensjis5[] = { -1 };
  int mblensjis6[] = { -1 };
  int mblensjis7[] = { -1 };
  int mblensjis8[] = { -1 };

  int *mblensjis[] = {
    mblensjis0,
    mblensjis1,
    mblensjis2,
    mblensjis3,
    mblensjis4,
    mblensjis5,
    mblensjis6,
    mblensjis7,
    mblensjis8,
  };

  wchar_t mbtowcsjis0[] = { 
    (wchar_t)'a', 
    (wchar_t)'b',
    (wchar_t)0x8140,
    (wchar_t)0x9f7e,
    (wchar_t)0xe080,
    (wchar_t)0xeffc,
    (wchar_t)'g',
    (wchar_t)'h',
    (wchar_t)0
  };
#endif /* CYGFUN_LIBC_I18N_LOCALE_C_SJIS */
    
#ifdef CYGFUN_LIBC_I18N_LOCALE_C_EUCJP
  unsigned char in_eucjp[] = 
    "ab\xa1\xa1\xa2\xfe\xe0\xfd\xef\xfcgh23";
  unsigned char fmt_eucjp[] = 
    "ab\xa1\xa1\xa2\xfe\xe0\xfd\xef\xfcgh%d";
 
  unsigned char * testeucjp[] = {
    "ab\xa1\xa1\xa2\xfe\xe0\xfd\xef\xfcgh",
    "\x80\xa1",
    "\xa0\xa1",
    "\xff\xa1",
    "\x40\xa1",
    "\xa3\x3f",
    "\xa4\x7f",
    "\xa5\xff",
    "\xb1",
  };

  int mbleneucjp0[] = { 1, 1, 2, 2, 2, 2, 1, 1, 0};
  int mbleneucjp1[] = { 1, -1 };
  int mbleneucjp2[] = { 1, -1 };
  int mbleneucjp3[] = { 1, -1 };
  int mbleneucjp4[] = { 1, -1 };
  int mbleneucjp5[] = { -1 };
  int mbleneucjp6[] = { -1 };
  int mbleneucjp7[] = { -1 };
  int mbleneucjp8[] = { -1 };

  int *mbleneucjp[] = {
    mbleneucjp0,
    mbleneucjp1,
    mbleneucjp2,
    mbleneucjp3,
    mbleneucjp4,
    mbleneucjp5,
    mbleneucjp6,
    mbleneucjp7,
    mbleneucjp8,
  };

  wchar_t mbtowceucjp0[] = { 
    (wchar_t)'a', 
    (wchar_t)'b',
    (wchar_t)0xa1a1,
    (wchar_t)0xa2fe,
    (wchar_t)0xe0fd,
    (wchar_t)0xeffc,
    (wchar_t)'g',
    (wchar_t)'h',
    (wchar_t)0
  };
#endif /* CYGFUN_LIBC_I18N_LOCALE_C_EUCJP */
  
  wchar_t wcbuff[100];
  char buff[100];
  
  char *ptr, *locale;
  int result, i, j, k;
  wchar_t *wcptr;

  k=k; locale=locale; // silence warnings
  
  CYG_TEST_INIT();
  
  CYG_TEST_INFO( "Starting tests from testcase " __FILE__ " for C library "
		 "<stdlib.h> multi-byte character functions" );
  
  setlocale (LC_ALL, "C");

  CYG_TEST_PASS_FAIL( MB_CUR_MAX == 1, "MB_CUR_MAX");

  CYG_TEST_PASS_FAIL( mblen(NULL, 0) == 0, "mblen(NULL, 0)");

  CYG_TEST_PASS_FAIL( mbtowc(NULL, NULL, 0) == 0, "mbtowc(NULL, NULL, 0)");

  CYG_TEST_PASS_FAIL( wctomb(NULL, 0) == 0, "wctomb(NULL, 0)");
 
  ptr = "abcdefghijklmnop";
  result = 1;
  j = 0;
  while (result > 0) 
    {
      result = mblen (ptr, MB_CUR_MAX);
      ptr += result;
      ++j;
    }

  CYG_TEST_PASS_FAIL( result == 0, "mblen (ptr, MB_CUR_MAX)");
  CYG_TEST_PASS_FAIL( j == strlen("abcdefghijklmnop") + 1, "j");

  ptr = "1234567890";
  wcptr = wcbuff;
  memset(wcbuff, 'K', 40);
  result = 1;
  while (result > 0) 
    {
      result = mbtowc (wcptr, ptr, MB_CUR_MAX);
      CYG_TEST_PASS_FAIL( *wcptr == (wchar_t)*ptr, "*wcptr");
      ptr += result;
      wcptr++;
      ++j;
    }  

  CYG_TEST_PASS_FAIL( wcptr - wcbuff == 11, "wcptr - wcbuff");
  CYG_TEST_PASS_FAIL( wcbuff[10] == 0, "wcbuff[10]");
 
  memset (buff, 'K', 40);
  ptr = buff;
  wcptr = wcbuff;
  result = 1;

  for (i = 0; i < 11; ++i)
    {
      result = wctomb (ptr, *wcptr);
      ptr += result;
      wcptr++;
    }  

  CYG_TEST_PASS_FAIL( strcmp("1234567890", buff) == 0, "strcmp(\"1234567890\", buff");

  memset (wcbuff, 'K', 40);
  result = mbstowcs (wcbuff, "abcdef", 7);
  CYG_TEST_PASS_FAIL( result == 6, "mbstowcs (wcbuff, \"abcdef\", 7)");
  CYG_TEST_PASS_FAIL(*((char *)(&wcbuff[7])) == 'K', "*((char *)(&wcbuff[7]))");
  CYG_TEST_PASS_FAIL( wcbuff[6] == 0, "wcbuff[6]"); 

  memset(buff, 'K', 20);
  result = wcstombs (buff, wcbuff, 20);
  CYG_TEST_PASS_FAIL( result == 6, "wcstombs (buff, wcbuff, 20)");
  CYG_TEST_PASS_FAIL( strcmp(buff, "abcdef") == 0, "strcmp(buff, \"abcdef\")");
   
#ifdef CYGFUN_LIBC_I18N_LOCALE_C_JIS

  CYG_TEST_INFO( "Testing C-JIS locale" );

  locale = setlocale (LC_CTYPE, "C-JIS");
  CYG_TEST_PASS_FAIL( locale != NULL, "setlocale (LC_CTYPE, \"C-JIS\")");
  
  CYG_TEST_PASS_FAIL( strcmp(locale, "C-JIS") == 0, "strcmp(locale, \"C-JIS\")");

  locale = setlocale (LC_CTYPE, NULL);
  CYG_TEST_PASS_FAIL( strcmp(locale, "C-JIS") == 0, "setlocale(LC_CTYPE, NULL)");

  CYG_TEST_PASS_FAIL( MB_CUR_MAX == 8, "MB_CUR_MAX");

  CYG_TEST_PASS_FAIL( mblen(NULL, 0) != 0, "mblen(NULL, 0)");

  CYG_TEST_PASS_FAIL( mbtowc(NULL, NULL, 0) != 0, "mbtowc(NULL, NULL, 0)");

  CYG_TEST_PASS_FAIL( wctomb(NULL, 0) != 0, "wctomb(NULL, 0)");

  for (i = 0; i < sizeof(testjis) / sizeof(char *); ++i)
    {
      ptr = testjis[i];
      result = 1;
      j = 0;
      while (result > 0) 
        {
          result = mblen (ptr, MB_CUR_MAX);
	  CYG_TEST_PASS_FAIL( result == mblenjis[i][j], "mblen (ptr, MB_CUR_MAX)");
          ptr += result;
          ++j;
        }  
    }
  
  ptr = testjis[0];
  wcptr = wcbuff;
  memset(wcbuff, 'K', 40);
  result = 1;
  j = 0;
  while (result > 0) 
    {
      result = mbtowc (wcptr, ptr, MB_CUR_MAX);
      CYG_TEST_PASS_FAIL( result == mblenjis0[j], "mbtowc (wcptr, ptr, MB_CUR_MAX)");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -