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