From patchwork Fri Mar 5 20:14:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 42290 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 AF9083897836; Fri, 5 Mar 2021 20:15:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AF9083897836 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614975336; bh=rrC3jWaDYVghy1qc7EivOhw+dhi2ws1qYnxxdv30FKE=; 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=wFgw22sgxakLxG0KjRBaaDkwTfx+NGfOggIaBPH6qJoAkfLbK9RQ811HH2pW6/oX9 qMOAna6i//j6M3EN6yLZtrpSP4brJq/2QQmoeL1rovvHuEqt8fa0RY1rOSFq56oCGJ 3pJtS1ItHo6pAIE8IHq0UCx3W0UzpPINvHuaoozw= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qv1-xf34.google.com (mail-qv1-xf34.google.com [IPv6:2607:f8b0:4864:20::f34]) by sourceware.org (Postfix) with ESMTPS id 19DC6388E828 for ; Fri, 5 Mar 2021 20:15:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 19DC6388E828 Received: by mail-qv1-xf34.google.com with SMTP id k7so1626554qvo.6 for ; Fri, 05 Mar 2021 12:15:33 -0800 (PST) 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=rrC3jWaDYVghy1qc7EivOhw+dhi2ws1qYnxxdv30FKE=; b=NsJgZ0ddEkmKL14lShKU6y4YTbe2R5CBbtV+bUX9+BehSN4oTB3ZAsEz0zJ9cMqRlk qcU+HOOxgm6kPboU+02au3Vp70Smgph90oiy7O1owk9rN8DOOYPh/5fylZeEBjZN6KfG EmOm2VuVlUXlu1suHXqWu7f3vvDKrSRr9vW1S7E43TIJ5JYMPRXQgzvrmAkh1VcgaZan lv5Ia5bHtF0YqLm1bI/yYi5CUhyO3aWHOXzDzUuk33mO6iEg+X7VU3SWRK3QrZvvywV9 cNogUMPHQxyxHGl3cZU278O9ZE4jnkH3LSetVtPWT+RZWpfR3MaxFnW11D18+Ogo3KwP wA2w== X-Gm-Message-State: AOAM531sJkOoEOmwjonsXZu6YlmRYDj298q/0oRS0ACnhPdGPeeQ8/Kv 0V7WQ6Fez19pfAVBAtGDY0KEjdDlsrHrFg== X-Google-Smtp-Source: ABdhPJx7tlWMHU/mRAhCLm7WoX4FmOQ8rKvlp1kHi1f78+YNLVBu98FB1MGW/wsuH2TtqMHuLhN24g== X-Received: by 2002:a0c:bd2f:: with SMTP id m47mr6700134qvg.53.1614975332384; Fri, 05 Mar 2021 12:15:32 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id c5sm2526145qkl.21.2021.03.05.12.15.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Mar 2021 12:15:32 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 08/52] time: Add 64 bit tests for getdate / getdate_r Date: Fri, 5 Mar 2021 17:14:34 -0300 Message-Id: <20210305201518.798584-9-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210305201518.798584-1-adhemerval.zanella@linaro.org> References: <20210305201518.798584-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 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 Netto 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. --- 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