summaryrefslogtreecommitdiff
path: root/support/regression/tests/wcsnlen.c
blob: 062fb6c1ba50c69be66fa32b645ecb8e9801cf00 (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
/** tests for wcsnlen
*/

#include <testfwk.h>

#include <string.h>
#include <wchar.h>

const wchar_t* hello1 = L"hello1";
const wchar_t hello2[] = L"hello2";
wchar_t hello3[] = L"hello3";

void
testStr(void)
{
#if  defined(__SDCC) || (_POSIX_C_SOURCE >= 200809L) || (__STDC_VERSION_STRING_H__ > 202311L) // wcsnlen is a C2Y function previously vailable in POSIX.
#ifndef __SDCC_pdk14 // lack of RAM
  const wchar_t hello4[] = L"hello4";
  const wchar_t hello5[7];

  memcpy (hello5, hello4, 7 * sizeof(wchar_t));

  ASSERT(wcsnlen(L"hello0", 23) == wcslen(L"hello0"));
  ASSERT(wcsnlen(hello1, 23) == wcslen(hello1));
  ASSERT(wcsnlen(hello2, 23) == wcslen(hello2));
  ASSERT(wcsnlen(hello3, 23) == wcslen(hello3));
  ASSERT(wcsnlen(hello4, 23) == wcslen(hello4));
  ASSERT(wcsnlen(hello5, 23) == wcslen(hello5));

  ASSERT(wcsnlen(L"hello0", 3) == 3);
  ASSERT(wcsnlen(hello1, 3) == 3);
  ASSERT(wcsnlen(hello2, 3) == 3);
  ASSERT(wcsnlen(hello3, 3) == 3);
  ASSERT(wcsnlen(hello4, 3) == 3);
  ASSERT(wcsnlen(hello5, 3) == 3);

#if !(defined(__SDCC_pdk15) && defined(__SDCC_STACK_AUTO)) // lack of code memory
  ASSERT(wcsnlen(L"hello0", 6) == 6);
  ASSERT(wcsnlen(hello1, 6) == 6);
  ASSERT(wcsnlen(hello2, 6) == 6);
  ASSERT(wcsnlen(hello3, 6) == 6);
  ASSERT(wcsnlen(hello4, 6) == 6);
  ASSERT(wcsnlen(hello5, 6) == 6);

  ASSERT(wcsnlen(L"hello0", 7) == 6);
  ASSERT(wcsnlen(hello1, 7) == 6);
  ASSERT(wcsnlen(hello2, 7) == 6);
  ASSERT(wcsnlen(hello3, 7) == 6);
  ASSERT(wcsnlen(hello4, 7) == 6);
  ASSERT(wcsnlen(hello5, 7) == 6);
#endif
#endif
#endif
}