# Test data for tst-nomeric, which checks it's implementation in glibc
# Copyright (C) 2003 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# Contributed by Petter Reinholdtsen <pere@hungry.com>, 2003
# Based on code by Jochen Hein <jochen.hein@delphi.central.de>, 1997.
#

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

# The format of this file is pretty simple: Each line contains a test
# for strfmon.  Fields are separated by TABs.  Lines that start with a
# '#' are comments and are ignored.
#
# Field Description
# #1    locale which is to be checked
# #2    format string which is fed into snprintf
# #3    double value that is used for formatting
# #4    the expected result (may contain trailing spaces!)
#
# First the implementation without any locale-dependent data
C	%g	1.23	1.23
C	%g	-1.23	-1.23
C	%g	0	0
C	%%	0	%
C	%'g	123.45	123.45
C	%'g	-123.45	-123.45
C	*%g*	1.23	*1.23*
C	%9g	1.23	     1.23
C	%9g	-1.23	    -1.23
#
# Locale-dependent test.
#
nn_NO.ISO-8859-1	%'g	123.45	123,45
nn_NO.ISO-8859-1	%'g	-123.45	-123,45
