/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

#include <assert.h>
#include <locale.h>
#include <wctype.h>

/* mingw-w64 headers */
#include "libtest.h"

/**
 * Test Summary:
 *
 * Verify that `towctrans` is consistent with mapping-specific wctype.h
 * functions.
 *
 * `towctrans (wc, wctrans ("tolower"))` must be equivalent to `towlower (wc)`.
 * `towctrans (wc, wctrans ("toupper"))` must be equivalent to `towupper (wc)`.
 *
 * POSIX requires that if second argument to `towctrans` is `(wctrans_t)0`,
 * then `wc` is returned unchanged.
 */

int main (void) {
  mingw_test_init ();

  if (setlocale (LC_ALL, "English_United States") == NULL) {
    return 77;
  }

  wctrans_t lower = 0;
  wctrans_t upper = 0;

  assert ((lower = wctrans ("tolower")) != (wctrans_t) 0);
  assert ((upper = wctrans ("toupper")) != (wctrans_t) 0);

  for (wint_t wc = 0;; ++wc) {
    assert (towctrans (wc, (wctrans_t) 0) == wc);
    assert (towlower (wc) == towctrans (wc, lower));
    assert (towupper (wc) == towctrans (wc, upper));

    if (wc == WEOF) {
      break;
    }
  }

  return 0;
}
