From 5cd1c5ab90fc825d9ed27906123f516fe06bd523 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 21 Feb 2024 11:23:14 -0500 Subject: [PATCH] Faster hex validation --- .../quartz/benchmark/HexBenchmark.kt | 6 +++++ .../vitorpamplona/quartz/encoders/HexUtils.kt | 26 +++---------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt index 7a8e0331c..8a4744cde 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/HexBenchmark.kt @@ -23,6 +23,7 @@ package com.vitorpamplona.quartz.benchmark import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.vitorpamplona.quartz.encoders.HexValidator import junit.framework.TestCase.assertEquals import org.junit.Rule import org.junit.Test @@ -65,4 +66,9 @@ class HexBenchmark { benchmarkRule.measureRepeated { assertEquals(testHex, fr.acinq.secp256k1.Hex.encode(bytes)) } } + + @Test + fun isHex() { + benchmarkRule.measureRepeated { HexValidator.isHex(testHex) } + } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt index b995bd6ba..ec7025ad5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/encoders/HexUtils.kt @@ -34,29 +34,9 @@ fun HexKey.hexToByteArray(): ByteArray { object HexValidator { private fun isHexChar(c: Char): Boolean { return when (c) { - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - -> true + in '0'..'9' -> true + in 'a'..'f' -> true + in 'A'..'F' -> true else -> false } }