lib.mkEUI64Suffix: bring @hsjobeki suggestions

renamed `mac` to `octets` in hextets combining step for better var
naming; rephrased error message to provide a hint of expected format;
replaced `Arguments` with `Inputs` in docstring; added more test cases
for invalid hex digits; added comments in hextets combining step;
This commit is contained in:
nukdokplex
2025-09-10 13:31:23 +05:00
parent 7abe9e95ec
commit 68253aae9b
2 changed files with 43 additions and 26 deletions

View File

@@ -70,7 +70,7 @@ in
mkEUI64Suffix :: String -> String
```
# Argumemts
# Inputs
mac
: The MAC address (may contain these delimiters: `:`, `-` or `.` but it's not necessary)
@@ -82,14 +82,25 @@ in
(match "^([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})$")
# check if there are matches
(matches: if matches == null then throw ''"${mac}" doesn't meet MAC address criteria'' else matches)
(
matches:
if matches == null then
throw ''"${mac}" is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)''
else
matches
)
# transform to result hextets
(mac: [
(toHexString (bitXor 512 (fromHexString ((elemAt mac 0) + (elemAt mac 1)))))
"${elemAt mac 2}ff"
"fe${elemAt mac 3}"
((elemAt mac 4) + (elemAt mac 5))
(octets: [
# combine 1st and 2nd octets into first hextet, flip U/L bit, 512 = 0x200
(toHexString (bitXor 512 (fromHexString ((elemAt octets 0) + (elemAt octets 1)))))
# combine 3rd and 4th octets, combine them, insert fffe pattern in between to get next two hextets
"${elemAt octets 2}ff"
"fe${elemAt octets 3}"
# combine 5th and 6th octets into the last hextet
((elemAt octets 4) + (elemAt octets 5))
])
# concat to result suffix

View File

@@ -132,24 +132,30 @@ expectSuccess 'mkEUI64Suffix "ffffffffffff"' '"fdff:ffff:feff:ffff"'
expectSuccess 'mkEUI64Suffix "00.00.00.00.00.00"' '"200:00ff:fe00:0000"'
expectSuccess 'mkEUI64Suffix "000000000000"' '"200:00ff:fe00:0000"'
expectFailure 'mkEUI64Suffix "123456789AB"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "123456789A"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "123456789"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "12345678"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "1234567"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "123456"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "12345"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "1234"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "123"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "12"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "1"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix ""' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "------------"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "............"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "::::::::::::"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "1:2:3:4:5:6"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "0.0.0.0.0.0"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "00:11:-2:AA:BB:CC"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "00:-11:22:AA:BB:CC"' "doesn't meet MAC address criteria"
expectFailure 'mkEUI64Suffix "123456789AB"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "123456789A"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "123456789"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "12345678"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "1234567"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "123456"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "12345"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "1234"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "123"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "12"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "1"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix ""' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "------------"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "............"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "::::::::::::"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "1:2:3:4:5:6"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "0.0.0.0.0.0"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "00:11:-2:AA:BB:CC"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "00:-11:22:AA:BB:CC"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "ab:cd:ef:g0:12:34' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "AB:CD:EF:G0:12:34' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "ab:cd:ef:gh:jk:lm' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "AB:CD:EF:GH:JK:LM' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "01:23:3a:bc:de:fg"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
expectFailure 'mkEUI64Suffix "01:23:3A:BC:DE:FG"' "is not a valid MAC address (expected 6 octets of hex digits with optional delimiters)"
echo >&2 tests ok