[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] std.pk: add new functions `isdigit_p' and `isxdigit_p'
From: |
Jose E. Marchesi |
Subject: |
Re: [PATCH 1/2] std.pk: add new functions `isdigit_p' and `isxdigit_p' |
Date: |
Thu, 26 Jan 2023 01:08:17 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Hi Mohammad.
I think we should follow the current trend of using names that are
familiar to C programmers, in Poke standard functions and in builtins.
So I would change the names of the functions to isdigit and isxdigit.
WDYT?
> 2023-01-26 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
>
> * libpoke/std.pk (isdigit_p): New function.
> (isxdigit_p): Likewise.
> * testsuite/poke.std/std-test.pk (tests): Add tests for `isdigit_p'
> and `isxdigit_p'.
> * doc/poke.texi (The Standard Library): Add doc.
> ---
> ChangeLog | 8 +++++
> doc/poke.texi | 39 ++++++++++++++++++++++
> libpoke/std.pk | 14 ++++++++
> testsuite/poke.std/std-test.pk | 60 ++++++++++++++++++++++++++++++++++
> 4 files changed, 121 insertions(+)
>
> diff --git a/ChangeLog b/ChangeLog
> index 47636ce0..fc67576c 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,11 @@
> +2023-01-26 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
> +
> + * libpoke/std.pk (isdigit_p): New function.
> + (isxdigit_p): Likewise.
> + * testsuite/poke.std/std-test.pk (tests): Add tests for `isdigit_p'
> + and `isxdigit_p'.
> + * doc/poke.texi (The Standard Library): Add doc.
> +
> 2023-01-25 Jose E. Marchesi <jemarch@gnu.org>
>
> * configure.ac: Bump version number to 3.0.
> diff --git a/doc/poke.texi b/doc/poke.texi
> index 437eef5d..ddbd5566 100644
> --- a/doc/poke.texi
> +++ b/doc/poke.texi
> @@ -253,6 +253,7 @@ The Standard Library
> * Conversion Functions:: catos, atoi, @i{etc}.
> * Array Functions:: Functions which deal with arrays.
> * String Functions:: Functions which deal with strings.
> +* Character Functions:: Functions which deal with characters.
> * Values Functions:: Functions which deal with values in general.
> * Sorting Functions:: qsort.
> * CRC Functions:: Cyclic Redundancy Checksums.
> @@ -15318,6 +15319,7 @@ facilities provided by the library.
> * Conversion Functions:: catos, atoi, @i{etc}.
> * Array Functions:: Functions which deal with arrays.
> * String Functions:: Functions which deal with strings.
> +* Character Functions:: Functions which deal with characters.
> * Values Functions:: Functions which deal with values in general.
> * IO Space Functions:: Functions that operate on IO spaces.
> * Sorting Functions:: qsort.
> @@ -15623,6 +15625,43 @@ It returns the index of the first occurrence of the
> character @var{c}
> in the string @var{s}. If the character is not found in the string,
> this function returns the length of the string.
>
> +@node Character Functions
> +@section Character Functions
> +The Poke standard library provides the following functions to deal
> +with characters:
> +
> +@menu
> +* isdigit_p:: Is given character a decimal digit?
> +* isxdigit_p:: Is given character a hexadecimal digit?
> +@end menu
> +
> +@node isdigit_p
> +
> +The standard function @code{isdigit_p} provides the following
> +interface:
> +
> +@example
> +fun isdigit_p = (uint<8> @var{c}) int<32>
> +@end example
> +
> +@noindent
> +it returns 0 when the given ASCII character @var{c} is not a decimal
> +digit, otherwise it returns a non-zero value.
> +
> +@node isxdigit_p
> +
> +The standard function @code{isxdigit_p} provides the following
> +interface:
> +
> +@example
> +fun isxdigit_p = (uint<8> @var{c}) int<32>
> +@end example
> +
> +@noindent
> +it returns 0 when the given ASCII character @var{c} is not a hexadecimal
> +digit, otherwise it returns a non-zero value.
> +
> +
> @node Values Functions
> @section Values Functions
> The Poke standard library provides the following functions to handle
> diff --git a/libpoke/std.pk b/libpoke/std.pk
> index 22699251..3084b557 100644
> --- a/libpoke/std.pk
> +++ b/libpoke/std.pk
> @@ -494,3 +494,17 @@ fun with_cur_ios = (int<32> ios,
> raise exc;
> }
> }
> +
> +/* Determine that the given ASCII character is a decimal digit or not. */
> +
> +fun isdigit_p = (uint<8> c) int<32>:
> +{
> + return c - '0' < 10;
> +}
> +
> +/* Determine that the given ASCII character is a hexadecimal digit or not.
> */
> +
> +fun isxdigit_p = (uint<8> c) int<32>:
> +{
> + return (c - '0' < 10UB) || ((c | 0x20UB) - 'a' < 6UB);
> +}
> diff --git a/testsuite/poke.std/std-test.pk b/testsuite/poke.std/std-test.pk
> index b3c6efe9..3e09ebef 100644
> --- a/testsuite/poke.std/std-test.pk
> +++ b/testsuite/poke.std/std-test.pk
> @@ -295,6 +295,66 @@ var tests = [
> qsort ([4,3,2,1], cmpints);
> },
> },
> + PkTest {
> + name = "isdigit_p",
> + func = lambda (string name) void:
> + {
> + assert (isdigit_p ('0'));
> + assert (isdigit_p ('1'));
> + assert (isdigit_p ('2'));
> + assert (isdigit_p ('3'));
> + assert (isdigit_p ('4'));
> + assert (isdigit_p ('5'));
> + assert (isdigit_p ('6'));
> + assert (isdigit_p ('7'));
> + assert (isdigit_p ('8'));
> + assert (isdigit_p ('9'));
> + assert (!isdigit_p ('a'));
> + assert (!isdigit_p ('B'));
> + assert (!isdigit_p ('}'));
> + assert (!isdigit_p (' '));
> + assert (!isdigit_p (0));
> + assert (!isdigit_p (0xa));
> + assert (!isdigit_p ('!'));
> + },
> + },
> + PkTest {
> + name = "isxdigit_p",
> + func = lambda (string name) void:
> + {
> + assert (isxdigit_p ('0'));
> + assert (isxdigit_p ('1'));
> + assert (isxdigit_p ('2'));
> + assert (isxdigit_p ('3'));
> + assert (isxdigit_p ('4'));
> + assert (isxdigit_p ('5'));
> + assert (isxdigit_p ('6'));
> + assert (isxdigit_p ('7'));
> + assert (isxdigit_p ('8'));
> + assert (isxdigit_p ('9'));
> + assert (isxdigit_p ('a'));
> + assert (isxdigit_p ('b'));
> + assert (isxdigit_p ('c'));
> + assert (isxdigit_p ('d'));
> + assert (isxdigit_p ('e'));
> + assert (isxdigit_p ('f'));
> + assert (isxdigit_p ('A'));
> + assert (isxdigit_p ('B'));
> + assert (isxdigit_p ('C'));
> + assert (isxdigit_p ('D'));
> + assert (isxdigit_p ('E'));
> + assert (isxdigit_p ('F'));
> + assert (!isxdigit_p ('x'));
> + assert (!isxdigit_p ('X'));
> + assert (!isxdigit_p (' '));
> + assert (!isxdigit_p ('}'));
> + assert (!isxdigit_p ('('));
> + assert (!isxdigit_p ('!'));
> + assert (!isxdigit_p ('\n'));
> + assert (!isxdigit_p (0xa));
> + assert (!isxdigit_p (0));
> + },
> + },
> ];
>
> exit (pktest_run (tests) ? 0 : 1);