Skip to content

Commit

Permalink
test: Added test-wchar
Browse files Browse the repository at this point in the history
Added testcase that checks input/output wide-chars to/from a file.
issue found by running SuperTest by Solid Sands

Signed-off-by: Ahmed Shehab <[email protected]>
  • Loading branch information
A-Shehab authored and keith-packard committed Jun 27, 2024
1 parent 45eb533 commit 02375d3
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 0 deletions.
7 changes: 7 additions & 0 deletions test/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,7 @@ foreach target : targets
'test-ungetc-ftell',
'test-fgetc',
'test-fgets-eof',
'test-wchar',
]
endif
endif
Expand Down Expand Up @@ -643,6 +644,12 @@ if enable_native_tests
c_args: native_c_args,
link_args: native_c_args,
dependencies: native_lib_m))
test('test-wchar',
executable('test-wchar',
'test-wchar.c',
c_args: native_c_args,
link_args: native_c_args,
dependencies: native_lib_m))

test('fenv-native',
executable('fenv-native',
Expand Down
77 changes: 77 additions & 0 deletions test/test-wchar.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright © 2024, Synopsys Inc.
* Copyright © 2024, Solid Sands B.V.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <stdio.h>
#include <wchar.h>


const wchar_t *string = L"Hello\n";

int main (void)
{
FILE *file;
const wchar_t *ref;
wint_t res;

/* Create testfile.dat in write mode */
file = fopen("testfile.dat", "w");
if (file == NULL) return 1;

/* Write wide characters to the file */
fputws(string, file);
fclose(file);

/* Open testfile.dat in read mode */
file = fopen("testfile.dat", "r");

for (ref = string; *ref != L'\0'; ref++) {

/* Read wide-char by wide-char from the file */
res = fgetwc(file);
if((wchar_t) res != *ref) {
printf("Test Failed: Failed to read wide character from file\n");
return 1;
}
}

if(fgetwc(file) != WEOF) {
printf("Test Failed: Failed to check if end-of-file reached\n");
return 1;
}

printf("Test Passed: Wide characters were written & read successfuly\n");
return 0;
}

0 comments on commit 02375d3

Please sign in to comment.