1#!/bin/sh 2# Copyright (C) 2000-2022 Free Software Foundation, Inc. 3# This file is part of the GNU C Library. 4# 5 6# The GNU C Library is free software; you can redistribute it and/or 7# modify it under the terms of the GNU Lesser General Public 8# License as published by the Free Software Foundation; either 9# version 2.1 of the License, or (at your option) any later version. 10 11# The GNU C Library is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14# Lesser General Public License for more details. 15 16# You should have received a copy of the GNU Lesser General Public 17# License along with the GNU C Library; if not, see 18# <https://www.gnu.org/licenses/>. 19 20# Checks that the iconv() implementation (in both directions) for a 21# stateless encoding agrees with the charmap table. 22 23common_objpfx=$1 24objpfx=$2 25test_program_prefix=$3 26charset=$4 27charmap=$5 28 29# sort is used on the build system. 30LC_ALL=C 31export LC_ALL 32 33set -e 34 35# Get the charmap. 36./tst-table-charmap.sh ${charmap:-$charset} \ 37 < ../localedata/charmaps/${charmap:-$charset} \ 38 > ${objpfx}tst-${charset}.charmap.table 39# When the charset is GB18030, truncate this table because for this encoding, 40# the tst-table-from and tst-table-to programs scan the Unicode BMP only. 41if test ${charset} = GB18030; then 42 grep '0x....$' < ${objpfx}tst-${charset}.charmap.table \ 43 > ${objpfx}tst-${charset}.truncated.table 44 mv ${objpfx}tst-${charset}.truncated.table ${objpfx}tst-${charset}.charmap.table 45fi 46 47# Precomputed expexted differences between the charmap and iconv forward. 48precomposed=${charset}.precomposed 49 50# Precompute expected differences between the charmap and iconv backward. 51if test ${charset} = EUC-TW; then 52 irreversible=${objpfx}tst-${charset}.irreversible 53 (grep '^0x8EA1' ${objpfx}tst-${charset}.charmap.table 54 cat ${charset}.irreversible 55 ) > ${irreversible} 56else 57 irreversible=${charset}.irreversible 58fi 59 60# iconv in one direction. 61${test_program_prefix} \ 62${objpfx}tst-table-from ${charset} \ 63 > ${objpfx}tst-${charset}.table 64 65# iconv in the other direction. 66${test_program_prefix} \ 67${objpfx}tst-table-to ${charset} | sort \ 68 > ${objpfx}tst-${charset}.inverse.table 69 70# Difference between the charmap and iconv backward. 71diff ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.inverse.table | \ 72 grep '^[<>]' | sed -e 's,^. ,,' > ${objpfx}tst-${charset}.irreversible.table 73 74# Check 1: charmap and iconv forward should be identical, except for 75# precomposed characters. 76if test -f ${precomposed}; then 77 cat ${objpfx}tst-${charset}.table ${precomposed} | sort | uniq -u \ 78 > ${objpfx}tst-${charset}.tmp.table 79 cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.tmp.table || 80 exit 1 81else 82 cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.table || 83 exit 1 84fi 85 86# Check 2: the difference between the charmap and iconv backward. 87if test -f ${irreversible}; then 88 cat ${objpfx}tst-${charset}.charmap.table ${irreversible} | sort | uniq -u \ 89 > ${objpfx}tst-${charset}.tmp.table 90 cmp -s ${objpfx}tst-${charset}.tmp.table ${objpfx}tst-${charset}.inverse.table || 91 exit 1 92else 93 cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.inverse.table || 94 exit 1 95fi 96 97exit 0 98