github.com/benhoyt/goawk@v1.8.1/testdata/gawk/compare2.awk (about)

     1  # From beebe@math.utah.edu  Thu Aug  2 15:35:07 2001
     2  # Received: from mail.actcom.co.il [192.114.47.13]
     3  # 	by localhost with POP3 (fetchmail-5.7.4)
     4  # 	for arnold@localhost (single-drop); Thu, 02 Aug 2001 15:35:07 +0300 (IDT)
     5  # Received: by actcom.co.il (mbox arobbins)
     6  #  (with Cubic Circle's cucipop (v1.31 1998/05/13) Thu Aug  2 16:02:36 2001)
     7  # X-From_: beebe@sunshine.math.utah.edu Thu Aug  2 15:41:13 2001
     8  # Received: from lmail.actcom.co.il by actcom.co.il  with ESMTP
     9  # 	(8.9.1a/actcom-0.2) id PAA01349 for <arobbins@actcom.co.il>;
    10  # 	Thu, 2 Aug 2001 15:41:06 +0300 (EET DST)  
    11  # 	(rfc931-sender: mail.actcom.co.il [192.114.47.13])
    12  # Received: from billohost.com (www.billohost.com [209.196.35.10])
    13  # 	by lmail.actcom.co.il (8.11.2/8.11.2) with ESMTP id f72Cf3I21032
    14  # 	for <arobbins@actcom.co.il>; Thu, 2 Aug 2001 15:41:05 +0300
    15  # Received: from fencepost.gnu.org (we-refuse-to-spy-on-our-users@fencepost.gnu.org [199.232.76.164])
    16  # 	by billohost.com (8.9.3/8.9.3) with ESMTP id IAA28585
    17  # 	for <arnold@skeeve.com>; Thu, 2 Aug 2001 08:34:38 -0400
    18  # Received: from sunshine.math.utah.edu ([128.110.198.2])
    19  # 	by fencepost.gnu.org with esmtp (Exim 3.22 #1 (Debian))
    20  # 	id 15SHjG-00036x-00
    21  # 	for <arnold@gnu.org>; Thu, 02 Aug 2001 08:37:30 -0400
    22  # Received: from suncore.math.utah.edu (IDENT:GsUbUdUYCtFLRE4HvnnvhN4JsjooYcfR@suncore0.math.utah.edu [128.110.198.5])
    23  # 	by sunshine.math.utah.edu (8.9.3/8.9.3) with ESMTP id GAA00190;
    24  # 	Thu, 2 Aug 2001 06:37:04 -0600 (MDT)
    25  # Received: (from beebe@localhost)
    26  # 	by suncore.math.utah.edu (8.9.3/8.9.3) id GAA20469;
    27  # 	Thu, 2 Aug 2001 06:37:03 -0600 (MDT)
    28  # Date: Thu, 2 Aug 2001 06:37:03 -0600 (MDT)
    29  # From: "Nelson H. F. Beebe" <beebe@math.utah.edu>
    30  # To: arnold@gnu.org
    31  # Cc: beebe@math.utah.edu
    32  # X-US-Mail: "Center for Scientific Computing, Department of Mathematics, 322
    33  #         INSCC, University of Utah, 155 S 1400 E RM 233, Salt Lake City, UT
    34  #         84112-0090, USA"
    35  # X-Telephone: +1 801 581 5254
    36  # X-FAX: +1 801 585 1640, +1 801 581 4148
    37  # X-URL: http://www.math.utah.edu/~beebe
    38  # Subject: awk implementations: a bug, or new dark corner?
    39  # Message-ID: <CMM.0.92.0.996755823.beebe@suncore.math.utah.edu>
    40  # Status: RO
    41  # 
    42  # Consider the following program:
    43  # 
    44  # % cat bug.awk
    45  BEGIN {
    46      split("00/00/00",mdy,"/")
    47      if ((mdy[1] == 0) && (mdy[2] == 0) && (mdy[3] == 0))
    48      {
    49          print "OK: zero strings compare equal to number zero"
    50          exit(0)
    51      }
    52      else
    53      {
    54          print "ERROR: zero strings compare unequal to number zero"
    55          exit(1)
    56      }
    57  }
    58  # 
    59  # Here are the awk implementation versions (on Sun Solaris 2.7):
    60  # 
    61  # 	% awk -V
    62  # 	awk version 19990416
    63  # 
    64  # 	% mawk -W version
    65  # 	mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
    66  # 
    67  # 	% nawk -V
    68  # 	awk version 20001115
    69  # 
    70  # 	% gawk --version
    71  # 	GNU Awk 3.1.10
    72  # 	...
    73  # 
    74  # Here's what they say about the test program:
    75  # 
    76  # 	foreach f (awk mawk nawk gawk gawk-*)
    77  # 		echo ======== $f
    78  # 		$f -f ~/bug.awk
    79  # 	end
    80  # 
    81  # 	======== awk
    82  # 	OK: zero strings compare equal to number zero
    83  # 	======== mawk
    84  # 	OK: zero strings compare equal to number zero
    85  # 	======== nawk
    86  # 	OK: zero strings compare equal to number zero
    87  # 	======== gawk
    88  # 	ERROR: zero strings compare unequal to number zero
    89  # 	======== gawk-3.0.0
    90  # 	OK: zero strings compare equal to number zero
    91  # 	======== gawk-3.0.1
    92  # 	OK: zero strings compare equal to number zero
    93  # 	======== gawk-3.0.3
    94  # 	OK: zero strings compare equal to number zero
    95  # 	======== gawk-3.0.4
    96  # 	OK: zero strings compare equal to number zero
    97  # 	======== gawk-3.0.5
    98  # 	OK: zero strings compare equal to number zero
    99  # 	======== gawk-3.0.6
   100  # 	OK: zero strings compare equal to number zero
   101  # 	======== gawk-3.0.60
   102  # 	OK: zero strings compare equal to number zero
   103  # 	======== gawk-3.0.90
   104  # 	ERROR: zero strings compare unequal to number zero
   105  # 	======== gawk-3.0.91
   106  # 	ERROR: zero strings compare unequal to number zero
   107  # 	======== gawk-3.0.92
   108  # 	ERROR: zero strings compare unequal to number zero
   109  # 	======== gawk-3.0.93
   110  # 	ERROR: zero strings compare unequal to number zero
   111  # 	======== gawk-3.0.94
   112  # 	ERROR: zero strings compare unequal to number zero
   113  # 	======== gawk-3.0.95
   114  # 	ERROR: zero strings compare unequal to number zero
   115  # 	======== gawk-3.0.96
   116  # 	ERROR: zero strings compare unequal to number zero
   117  # 	======== gawk-3.0.97
   118  # 	ERROR: zero strings compare unequal to number zero
   119  # 	======== gawk-3.1.0
   120  # 	ERROR: zero strings compare unequal to number zero
   121  # 	======== gawk-3.1.10
   122  # 	ERROR: zero strings compare unequal to number zero
   123  # 
   124  # Identical results were obtained on Apple Rhapsody, Apple Darwin,
   125  # Compaq/DEC Alpha OSF/1, Intel x86 GNU/Linux, SGI IRIX 6.5, DEC Alpha
   126  # GNU/Linux, and Sun SPARC GNU/Linux, so it definitely is not a C
   127  # compiler problem.
   128  # 
   129  # However, the gray awk book, p. 44, says:
   130  # 
   131  # 	In a comparison expression like:
   132  # 		x == y
   133  # 	if both operands have a numeric type, the comparison is numeric;
   134  # 	otherwise, any numeric operand is converted to a string and the
   135  # 	comparison is made on the string values.
   136  # 
   137  # and the new green gawk book, p. 95, says:
   138  # 
   139  # 	When comparing operands of mixed types, numeric operands are
   140  # 	converted to strings using the value of `CONVFMT'
   141  # 
   142  # This suggests that the OK response in bug.awk is wrong, and the ERROR
   143  # response is correct.  Only recent gawk releases do the right thing,
   144  # and it is awk, mawk, and nawk that have a bug.
   145  # 
   146  # If I change the test program from "00/00/00" to "0/0/0", all versions
   147  # tested produce the OK response.
   148  # 
   149  # Comments?
   150  # 
   151  # After reading the two book excerpts, I changed my code to read
   152  # 
   153  #     if (((0 + mdy[1]) == 0) && ((0 + mdy[2]) == 0) && ((0 + mdy[3]) == 0))
   154  # 
   155  # and output from all implementations now agrees.
   156  # 
   157  # -------------------------------------------------------------------------------
   158  # - Nelson H. F. Beebe                    Tel: +1 801 581 5254                  -
   159  # - Center for Scientific Computing       FAX: +1 801 585 1640, +1 801 581 4148 -
   160  # - University of Utah                    Internet e-mail: beebe@math.utah.edu  -
   161  # - Department of Mathematics, 322 INSCC      beebe@acm.org  beebe@computer.org -
   162  # - 155 S 1400 E RM 233                       beebe@ieee.org                    -
   163  # - Salt Lake City, UT 84112-0090, USA    URL: http://www.math.utah.edu/~beebe  -
   164  # -------------------------------------------------------------------------------
   165  #