From 999401f3ceabe8ab1b6bb1daed400e6ba2497aac Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Wed, 5 Jun 2024 10:22:58 +0800 Subject: [PATCH] bahaghari/lib: update hex subset to properly accept inputs with mixed letter cases --- subprojects/bahaghari/lib/hex.nix | 33 ++++++++++++++++++++++--- subprojects/bahaghari/tests/lib/hex.nix | 15 +++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/subprojects/bahaghari/lib/hex.nix b/subprojects/bahaghari/lib/hex.nix index 29edffc8..56876e72 100644 --- a/subprojects/bahaghari/lib/hex.nix +++ b/subprojects/bahaghari/lib/hex.nix @@ -27,10 +27,37 @@ let baseSet = self.generateBaseDigitType glyphList; in rec { - /* Returns a convenient glyph set for creating your own conversion or - hex-related functions. + inherit (baseSet) glyphSet conversionTable; + + /* Converts a hexadecimal digit string into its decimal equivalent. + + Type: toDec :: String -> Number + + Example: + toDec "FF" + => 255 + + toDec "ff" + => 255 */ - inherit (baseSet) glyphSet conversionTable fromDec toDec; + toDec = digit: + let + digit' = lib.toUpper digit; + in + baseSet.toDec digit'; + + /* Converts a decimal digit into its hexadecimal notation. + + Type: fromDec :: Number -> String + + Example: + fromDec 255 + => "FF" + + fromDec 293454837 + => "117DC3F5" + */ + fromDec = decimal: lib.toUpper (baseSet.fromDec decimal); /* A variant of `lib.lists.range` function just with hexadecimal digits. diff --git a/subprojects/bahaghari/tests/lib/hex.nix b/subprojects/bahaghari/tests/lib/hex.nix index d071975d..f685a54b 100644 --- a/subprojects/bahaghari/tests/lib/hex.nix +++ b/subprojects/bahaghari/tests/lib/hex.nix @@ -41,6 +41,16 @@ lib.runTests { expected = 2565; }; + testHexToDecLowercase = { + expr = self.hex.toDec "0A0FfbA"; + expected = 10551226; + }; + + testHexToDecLowercase2 = { + expr = self.hex.toDec "0af"; + expected = 175; + }; + testCreateHexRange = { expr = self.hex.range 10 17; expected = [ "A" "B" "C" "D" "E" "F" "10" "11" ]; @@ -75,4 +85,9 @@ lib.runTests { expr = self.hex.pad (-5) "A42C"; expected = "A42C"; }; + + testHexPadWithMixedLetterCase = { + expr = self.hex.pad 8 "AfB9"; + expected = "0000AfB9"; + }; }