From patchwork Tue Mar 23 13:44:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 42753 X-Patchwork-Delegate: siddhesh@gotplt.org Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 421283850416; Tue, 23 Mar 2021 13:45:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 421283850416 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1616507119; bh=wGXne2vQdGUdiIVFUqzvCh54BsiqNpMjAqqAuStCoE4=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=yLiL9GGMOaXu3hlglv0H1x9wT0Z9Mbu7rDPzcJ0r2TgHjap1GFP5apZUL2hKIVE6Q 2IMbWnmDpagw8Ev5tCoGBWK99KNtHVt4ncwx+tKoUK5jEy041SpnhNHmxOa2b/lnRQ 6D1UeHAYk4niai+AXvRYKEJeYb3FcEmw4twq3TTw= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qv1-xf35.google.com (mail-qv1-xf35.google.com [IPv6:2607:f8b0:4864:20::f35]) by sourceware.org (Postfix) with ESMTPS id 9D7C83850417 for ; Tue, 23 Mar 2021 13:45:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9D7C83850417 Received: by mail-qv1-xf35.google.com with SMTP id d10so10459575qve.7 for ; Tue, 23 Mar 2021 06:45:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wGXne2vQdGUdiIVFUqzvCh54BsiqNpMjAqqAuStCoE4=; b=hZ9E3G8ZtevS4u/vFDc4+sMYhAYE8vf91x1YcbI8ZIAUXTGon96+nnDT84IpbRK1MW PJn62wRWr87kZUxcNQ9CX2aMTiUYNJGVju23ev+aW1AEJTetDzSlTgi9EJO31drqmDdf TK3qBLDgwLe3k92Bb8h/TzWH+Ne4/3SBRd1KLFEd07f3U53FYTgXvifP9os1FEBvCsdq NyvD5RxCAA/rZu4bBxV9VldjuOqBN6HQTpcKbvjBJaXgnfGGDuWT1yYZ/rBtSbQuzJOu sznOwED2mKL+35trlYfARI/iSEonZaewsEaN68G3lmzucxq2Qdo/JR+xJSQmDGpYOdtR cYCQ== X-Gm-Message-State: AOAM531HyKXRTH58A1bRHn0EipjIPFgW4Beu7TT20LdMTW5ame9zzIMk Zv2h3Qh5ziFnarBoCl00G/762Pr88WQCJg== X-Google-Smtp-Source: ABdhPJwor3jvxb+w4CdJhLzSG92AjD4VBVN0QQEHrTnA4YV2Chx37xwDBH5fQLr9gGxniRJaK7811Q== X-Received: by 2002:a05:6214:1391:: with SMTP id g17mr4769527qvz.51.1616507113914; Tue, 23 Mar 2021 06:45:13 -0700 (PDT) Received: from localhost.localdomain ([177.194.41.149]) by smtp.googlemail.com with ESMTPSA id z24sm12783384qkz.65.2021.03.23.06.45.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 06:45:13 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH 10/15] time: Add 64 bit tests for getdate / getdate_r Date: Tue, 23 Mar 2021 10:44:53 -0300 Message-Id: <20210323134458.2563022-11-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210323134458.2563022-1-adhemerval.zanella@linaro.org> References: <20210323134458.2563022-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" The test is also converted to use libsupport. Checked on i686-linux-gnu and x86_64-linux-gnu. Reviewed-by: Siddhesh Poyarekar --- time/tst-getdate.c | 153 +++++++++++++++++++++++++++------------------ 1 file changed, 92 insertions(+), 61 deletions(-) diff --git a/time/tst-getdate.c b/time/tst-getdate.c index 37ecc4823e..c37ba3083a 100644 --- a/time/tst-getdate.c +++ b/time/tst-getdate.c @@ -17,110 +17,141 @@ License along with the GNU C Library; if not, see . */ +#include +#include #include #include #include +#include +#include +#include #include static const struct { const char *str; const char *tz; - int err; struct tm tm; + bool time64; } tests [] = { - {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}}, - {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}}, - {" 21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}}, - {"21:01:10 1999-1-31 ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}}, - {" 21:01:10 1999-1-31 ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}}, - {"21:01:10 1999-2-28", "Universal", 0, {10, 1, 21, 28, 1, 99, 0, 0, 0}}, - {"16:30:46 2000-2-29", "Universal", 0, {46, 30,16, 29, 1, 100, 0, 0, 0}}, - {"01-08-2000 05:06:07", "Europe/Berlin", 0, {7, 6, 5, 1, 7, 100, 0, 0, 0}} + {"21:01:10 1999-1-31", "Universal", {10, 1, 21, 31, 0, 99, 0, 0, 0}, + false }, + {"21:01:10 1999-1-31", "Universal", {10, 1, 21, 31, 0, 99, 0, 0, 0}, + false }, + {" 21:01:10 1999-1-31", "Universal", {10, 1, 21, 31, 0, 99, 0, 0, 0}, + false }, + {"21:01:10 1999-1-31 ", "Universal", {10, 1, 21, 31, 0, 99, 0, 0, 0}, + false }, + {" 21:01:10 1999-1-31 ", "Universal", {10, 1, 21, 31, 0, 99, 0, 0, 0}, + false }, + {"21:01:10 1999-2-28", "Universal", {10, 1, 21, 28, 1, 99, 0, 0, 0}, + false }, + {"16:30:46 2000-2-29", "Universal", {46, 30,16, 29, 1, 100, 0, 0, 0}, + false }, + {"01-08-2000 05:06:07", "Europe/Berlin", {7, 6, 5, 1, 7, 100, 0, 0, 0}, + false }, + + /* 64 bit time_t tests. */ + {"21:01:10 2038-1-31", "Universal", {10, 1, 21, 31, 0, 138, 0, 0, 0}, + true }, + {"22:01:10 2048-5-20", "Universal", {10, 1, 22, 20, 4, 148, 0, 0, 0}, + true }, + {"01-08-2038 05:06:07", "Europe/Berlin", {7, 6, 5, 1, 7, 138, 0, 0, 0}, + true }, + {"20-03-2050 21:30:08", "Europe/Berlin", {8, 30, 21, 20, 2, 150, 0, 0, 0}, + true } }; -static void -report_date_error (int err) +static const char * +report_date_error (void) { - switch(err) + switch (getdate_err) { case 1: - printf ("The environment variable DATEMSK is not defined or null.\n"); - break; + return "The environment variable DATEMSK is not defined or null."; case 2: - printf ("The template file denoted by the DATEMSK environment variable cannot be opened.\n"); - break; + return "The template file denoted by the DATEMSK environment variable " + "cannot be opened."; case 3: - printf ("Information about the template file cannot retrieved.\n"); - break; + return "Information about the template file cannot retrieved."; case 4: - printf ("The template file is not a regular file.\n"); - break; + return "The template file is not a regular file.\n"; case 5: - printf ("An I/O error occurred while reading the template file.\n"); - break; + return "An I/O error occurred while reading the template file."; case 6: - printf ("Not enough memory available to execute the function.\n"); - break; + return "Not enough memory available to execute the function."; case 7: - printf ("The template file contains no matching template.\n"); - break; + return "The template file contains no matching template."; case 8: - printf ("The input date is invalid, but would match a template otherwise.\n"); - break; + return "The input date is invalid, but would match a template " + "otherwise."; default: - printf("Unknown error code.\n"); - break; + return "Unknown error code."; } } +static char *datemsk; +static const char datemskstr[] = + "%H:%M:%S %F\n" + "%d-%m-%Y %T\n"; + +static void +do_prepare (int argc, char **argv) +{ + int fd = create_temp_file ("tst-chk1.", &datemsk); + xwrite (fd, datemskstr, sizeof (datemskstr) - 1); + + setenv ("DATEMSK", datemsk, 1); +} +#define PREPARE do_prepare static int do_test (void) { - int errors = 0; - size_t i; struct tm *tm; - - for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) + for (int i = 0; i < array_length (tests); ++i) { setenv ("TZ", tests[i].tz, 1); - tm = getdate (tests[i].str); + int expected_err; + if (sizeof (time_t) == 4 && tests[i].time64) + expected_err = 8; + else + expected_err = 0; - if (getdate_err != tests[i].err) + tm = getdate (tests[i].str); + TEST_COMPARE (getdate_err, expected_err); + if (getdate_err != expected_err) { - printf ("Failure for getdate (\"%s\"):\n", tests[i].str); - printf ("getdate_err should be %d but returned: %d which means:\n", - tests[i].err, getdate_err); - report_date_error (getdate_err); - ++errors; + support_record_failure (); + printf ("%s\n", report_date_error ()); } - else if (tests[i].tm.tm_mon != tm->tm_mon - || tests[i].tm.tm_year != tm->tm_year - || tests[i].tm.tm_mday != tm->tm_mday - || tests[i].tm.tm_hour != tm->tm_hour - || tests[i].tm.tm_min != tm->tm_min - || tests[i].tm.tm_sec != tm->tm_sec) + else if (getdate_err == 0) + { + TEST_COMPARE (tests[i].tm.tm_mon, tm->tm_mon); + TEST_COMPARE (tests[i].tm.tm_year, tm->tm_year); + TEST_COMPARE (tests[i].tm.tm_mday, tm->tm_mday); + TEST_COMPARE (tests[i].tm.tm_hour, tm->tm_hour); + TEST_COMPARE (tests[i].tm.tm_min, tm->tm_min); + TEST_COMPARE (tests[i].tm.tm_sec, tm->tm_sec); + } + + struct tm tms; + TEST_COMPARE (getdate_r (tests[i].str, &tms), expected_err); + if (getdate_err == 0) { - printf ("Failure for getdate (\"%s\"):\n", tests[i].str); - printf ("struct tm is: %d-%d-%d %d:%d:%d\n", - tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); - printf ("but should be: %d-%d-%d %d:%d:%d\n", - tests[i].tm.tm_year + 1900, tests[i].tm.tm_mon + 1, - tests[i].tm.tm_mday, - tests[i].tm.tm_hour, tests[i].tm.tm_min, tests[i].tm.tm_sec); - ++errors; + TEST_COMPARE (tests[i].tm.tm_mon, tms.tm_mon); + TEST_COMPARE (tests[i].tm.tm_year, tms.tm_year); + TEST_COMPARE (tests[i].tm.tm_mday, tms.tm_mday); + TEST_COMPARE (tests[i].tm.tm_hour, tms.tm_hour); + TEST_COMPARE (tests[i].tm.tm_min, tms.tm_min); + TEST_COMPARE (tests[i].tm.tm_sec, tms.tm_sec); } } - if (!errors) - printf ("No errors found.\n"); - return errors != 0; + return 0; } -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" +#include