Hi, I was looking at making 'cut' operate on multibyte characters. Changing expressions like this with multiple characters:
if (c == last_c || /* More character comparisons. */) to this: if (mcel_cmp (g, last_g) != 0 || /* More character comparisons. */) got a bit difficult to read, in my opinion. How about adding a mcel_eq function? Similar to streq, just using the *cmp function under the hood. Collin
>From 20e42952ae74f68c0499b77c298f7aa844fe54bb Mon Sep 17 00:00:00 2001 Message-ID: <20e42952ae74f68c0499b77c298f7aa844fe54bb.1764225493.git.collin.fu...@gmail.com> From: Collin Funk <[email protected]> Date: Wed, 26 Nov 2025 22:32:41 -0800 Subject: [PATCH] mcel: add mcel_eq. * lib/mcel.h (mcel_eq): New function. * tests/test-mcel.c (main): Add tests. --- ChangeLog | 6 ++++++ lib/mcel.h | 7 +++++++ tests/test-mcel.c | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/ChangeLog b/ChangeLog index e707767877..30bcb1162f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2025-11-26 Collin Funk <[email protected]> + + mcel: add mcel_eq. + * lib/mcel.h (mcel_eq): New function. + * tests/test-mcel.c (main): Add tests. + 2025-11-15 Basil L. Contovounesios <[email protected]> maintainer-makefile: Auto-detect NEWS.md. diff --git a/lib/mcel.h b/lib/mcel.h index 3e770c8c60..b65ea565af 100644 --- a/lib/mcel.h +++ b/lib/mcel.h @@ -185,6 +185,13 @@ mcel_cmp (mcel_t c1, mcel_t c2) return ((c1.err - c2.err) * (1 << MCEL_ERR_SHIFT)) + (ch1 - ch2); } +/* Return true if C1 and C2 are equal. */ +MCEL_INLINE int +mcel_eq (mcel_t c1, mcel_t c2) +{ + return ! mcel_cmp (c1, c2); +} + /* Apply the uchar translator TO to C1 and C2 and compare the results, with encoding errors sorting after characters, Return <0, 0, >0 for <, =, >. */ diff --git a/tests/test-mcel.c b/tests/test-mcel.c index 03572b48a8..fb5d270f1d 100644 --- a/tests/test-mcel.c +++ b/tests/test-mcel.c @@ -58,11 +58,14 @@ main (int argc, char *argv[]) ASSERT (c.len == 1); ASSERT (!c.err); ASSERT (mcel_cmp (c, c) == 0); + ASSERT (mcel_eq (c, c)); ASSERT (mcel_tocmp (to_ascii, c, c) == 0); if (ch) { ASSERT (mcel_cmp (prev, c) < 0); ASSERT (mcel_cmp (c, prev) > 0); + ASSERT (! mcel_eq (prev, c)); + ASSERT (! mcel_eq (c, prev)); ASSERT (mcel_tocmp (to_ascii, prev, c) < 0); ASSERT (mcel_tocmp (to_ascii, c, prev) > 0); } @@ -94,9 +97,12 @@ main (int argc, char *argv[]) ASSERT (c.len == 2); ASSERT (!c.err); ASSERT (mcel_cmp (c, c) == 0); + ASSERT (mcel_eq (c, c)); ASSERT (mcel_tocmp (to_ascii, c, c) == 0); ASSERT (mcel_cmp (prev, c) < 0); ASSERT (mcel_cmp (c, prev) > 0); + ASSERT (! mcel_eq (prev, c)); + ASSERT (! mcel_eq (c, prev)); ASSERT (mcel_tocmp (to_ascii, c, c) == 0); int cmp = to_ascii (c.ch) ? -1 : 1; ASSERT (sgn (mcel_tocmp (to_ascii, prev, c)) == cmp); @@ -110,8 +116,11 @@ main (int argc, char *argv[]) ASSERT (c.len == 1); ASSERT (c.err == err); ASSERT (mcel_cmp (c, c) == 0); + ASSERT (mcel_eq (c, c)); ASSERT (mcel_cmp (prev, c) < 0); ASSERT (mcel_cmp (c, prev) > 0); + ASSERT (! mcel_eq (prev, c)); + ASSERT (! mcel_eq (c, prev)); ASSERT (mcel_tocmp (to_ascii, c, c) == 0); ASSERT (mcel_tocmp (to_ascii, prev, c) < 0); ASSERT (mcel_tocmp (to_ascii, c, prev) > 0); -- 2.52.0
