Atlas - testiconv.c
Home / ext / SDL / test Lines: 2 | Size: 3632 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)][FILE BEGIN]1/* 2 Copyright (C) 1997-2025 Sam Lantinga <[email protected]> 3 4 This software is provided 'as-is', without any express or implied 5 warranty. In no event will the authors be held liable for any damages 6 arising from the use of this software. 7 8 Permission is granted to anyone to use this software for any purpose, 9 including commercial applications, and to alter it and redistribute it 10 freely. 11*/ 12 13#include <SDL3/SDL.h> 14#include <SDL3/SDL_main.h> 15#include <SDL3/SDL_test.h> 16#include "testutils.h" 17 18static size_t 19widelen(char *data) 20{ 21 size_t len = 0; 22 Uint32 *p = (Uint32 *)data; 23 while (*p++) { 24 ++len; 25 } 26 return len; 27} 28 29static char *get_next_line(Uint8 **fdataptr, size_t *fdatalen) 30{ 31 char *result = (char *) *fdataptr; 32 Uint8 *ptr = *fdataptr; 33 size_t len = *fdatalen; 34 35 if (len == 0) { 36 return NULL; 37 } 38 39 while (len > 0) { 40 if (*ptr == '\r') { 41 *ptr = '\0'; 42 } else if (*ptr == '\n') { 43 *ptr = '\0'; 44 ptr++; 45 len--; 46 break; 47 } 48 ptr++; 49 len--; 50 } 51 52 *fdataptr = ptr; 53 *fdatalen = len; 54 return result; 55} 56 57int main(int argc, char *argv[]) 58{ 59 const char *formats[] = { 60 "UTF8", 61 "UTF-8", 62 "UTF16BE", 63 "UTF-16BE", 64 "UTF16LE", 65 "UTF-16LE", 66 "UTF32BE", 67 "UTF-32BE", 68 "UTF32LE", 69 "UTF-32LE", 70 "UCS4", 71 "UCS-4", 72 }; 73 74 char *fname = NULL; 75 char *ucs4; 76 char *test[2]; 77 int i; 78 int errors = 0; 79 SDLTest_CommonState *state; 80 Uint8 *fdata = NULL; 81 Uint8 *fdataptr = NULL; 82 char *line = NULL; 83 size_t fdatalen = 0; 84 85 /* Initialize test framework */ 86 state = SDLTest_CommonCreateState(argv, 0); 87 if (!state) { 88 return 1; 89 } 90 91 /* Parse commandline */ 92 for (i = 1; i < argc;) { 93 int consumed; 94 95 consumed = SDLTest_CommonArg(state, i); 96 if (!consumed) { 97 if (!fname) { 98 fname = argv[i]; 99 consumed = 1; 100 } 101 } 102 if (consumed <= 0) { 103 static const char *options[] = { "[utf8.txt]", NULL }; 104 SDLTest_CommonLogUsage(state, argv[0], options); 105 return 1; 106 } 107 108 i += consumed; 109 } 110 111 fname = GetResourceFilename(fname, "utf8.txt"); 112 fdata = (Uint8 *) (fname ? SDL_LoadFile(fname, &fdatalen) : NULL); 113 if (!fdata) { 114 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to load %s", fname); 115 return 1; 116 } 117 118 fdataptr = fdata; 119 while ((line = get_next_line(&fdataptr, &fdatalen)) != NULL) { 120 /* Convert to UCS-4 */ 121 size_t len; 122 ucs4 = SDL_iconv_string("UCS-4", "UTF-8", line, SDL_strlen(line) + 1); 123 len = (widelen(ucs4) + 1) * 4; 124 125 for (i = 0; i < SDL_arraysize(formats); ++i) { 126 test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len); 127 test[1] = SDL_iconv_string("UCS-4", formats[i], test[0], len); 128 if (!test[1] || SDL_memcmp(test[1], ucs4, len) != 0) { 129 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "FAIL: %s", formats[i]); 130 ++errors; 131 } 132 SDL_free(test[0]); 133 SDL_free(test[1]); 134 } 135 test[0] = SDL_iconv_string("UTF-8", "UCS-4", ucs4, len); 136 SDL_free(ucs4); 137 SDL_Log("%s", test[0]); 138 SDL_free(test[0]); 139 } 140 SDL_free(fdata); 141 SDL_free(fname); 142 143 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Total errors: %d", errors); 144 SDL_Quit(); 145 SDLTest_CommonDestroyState(state); 146 return errors ? errors + 1 : 0; 147} 148[FILE END](C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.