140266059SGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 340266059SGregory Neil Shapiro * All rights reserved. 440266059SGregory Neil Shapiro * 540266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 640266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 740266059SGregory Neil Shapiro * the sendmail distribution. 840266059SGregory Neil Shapiro */ 940266059SGregory Neil Shapiro 1040266059SGregory Neil Shapiro #include <sm/gen.h> 11*4313cc83SGregory Neil Shapiro SM_IDSTR(id, "@(#)$Id: t-float.c,v 1.19 2013-11-22 20:51:43 ca Exp $") 1240266059SGregory Neil Shapiro 1340266059SGregory Neil Shapiro #include <sm/limits.h> 1440266059SGregory Neil Shapiro #include <sm/io.h> 1540266059SGregory Neil Shapiro #include <sm/string.h> 1640266059SGregory Neil Shapiro #include <sm/test.h> 1740266059SGregory Neil Shapiro #include <sm/types.h> 1840266059SGregory Neil Shapiro 1940266059SGregory Neil Shapiro int 2040266059SGregory Neil Shapiro main(argc, argv) 2140266059SGregory Neil Shapiro int argc; 2240266059SGregory Neil Shapiro char **argv; 2340266059SGregory Neil Shapiro { 2440266059SGregory Neil Shapiro double d, d2; 2540266059SGregory Neil Shapiro double ld; 2640266059SGregory Neil Shapiro char buf[128]; 2740266059SGregory Neil Shapiro char *r; 2840266059SGregory Neil Shapiro 2940266059SGregory Neil Shapiro /* 3040266059SGregory Neil Shapiro ** Sendmail uses printf and scanf with doubles, 3140266059SGregory Neil Shapiro ** so make sure that this works. 3240266059SGregory Neil Shapiro */ 3340266059SGregory Neil Shapiro 3440266059SGregory Neil Shapiro sm_test_begin(argc, argv, "test floating point stuff"); 3540266059SGregory Neil Shapiro 3640266059SGregory Neil Shapiro d = 1.125; 3740266059SGregory Neil Shapiro sm_snprintf(buf, sizeof(buf), "%d %.3f %d", 0, d, 1); 3840266059SGregory Neil Shapiro r = "0 1.125 1"; 3940266059SGregory Neil Shapiro if (!SM_TEST(strcmp(buf, r) == 0)) 4040266059SGregory Neil Shapiro (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, 4140266059SGregory Neil Shapiro "got %s instead\n", buf); 4240266059SGregory Neil Shapiro 4340266059SGregory Neil Shapiro d = 1.125; 4440266059SGregory Neil Shapiro sm_snprintf(buf, sizeof(buf), "%.3f", d); 4540266059SGregory Neil Shapiro r = "1.125"; 4640266059SGregory Neil Shapiro if (!SM_TEST(strcmp(buf, r) == 0)) 4740266059SGregory Neil Shapiro (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, 4840266059SGregory Neil Shapiro "got %s instead\n", buf); 4940266059SGregory Neil Shapiro d2 = 0.0; 5040266059SGregory Neil Shapiro sm_io_sscanf(buf, "%lf", &d2); 5140266059SGregory Neil Shapiro #if SM_CONF_BROKEN_STRTOD 5240266059SGregory Neil Shapiro if (d != d2) 5340266059SGregory Neil Shapiro { 5440266059SGregory Neil Shapiro (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, 5540266059SGregory Neil Shapiro "wanted %f, got %f\n", d, d2); 5640266059SGregory Neil Shapiro (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, 5740266059SGregory Neil Shapiro "error ignored since SM_CONF_BROKEN_STRTOD is set for this OS\n"); 5840266059SGregory Neil Shapiro } 5940266059SGregory Neil Shapiro #else /* SM_CONF_BROKEN_STRTOD */ 6040266059SGregory Neil Shapiro if (!SM_TEST(d == d2)) 6140266059SGregory Neil Shapiro (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, 6240266059SGregory Neil Shapiro "wanted %f, got %f\n", d, d2); 6340266059SGregory Neil Shapiro #endif /* SM_CONF_BROKEN_STRTOD */ 6440266059SGregory Neil Shapiro 6540266059SGregory Neil Shapiro ld = 2.5; 6640266059SGregory Neil Shapiro sm_snprintf(buf, sizeof(buf), "%.3f %.1f", d, ld); 6740266059SGregory Neil Shapiro r = "1.125 2.5"; 6840266059SGregory Neil Shapiro if (!SM_TEST(strcmp(buf, r) == 0)) 6940266059SGregory Neil Shapiro (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, 7040266059SGregory Neil Shapiro "got %s instead\n", buf); 7140266059SGregory Neil Shapiro return sm_test_end(); 7240266059SGregory Neil Shapiro } 73