summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gobang.go5
-rw-r--r--tests/gobang.go28
2 files changed, 33 insertions, 0 deletions
diff --git a/src/gobang.go b/src/gobang.go
index ed26a04..57a087d 100644
--- a/src/gobang.go
+++ b/src/gobang.go
@@ -1,6 +1,7 @@
package gobang
import (
+ "cmp"
"crypto/rand"
"errors"
"fmt"
@@ -64,6 +65,10 @@ var (
+func Clamp[T cmp.Ordered](n T, minimum T, maximum T) T {
+ return min(maximum, max(minimum, n))
+}
+
var _SQLTablePrefixRE = regexp.MustCompilePOSIX("^[a-zA-Z][_a-zA-z0-9]*$")
func ValidateSQLTablePrefix(prefix string) error {
if !_SQLTablePrefixRE.MatchString(prefix) {
diff --git a/tests/gobang.go b/tests/gobang.go
index 64e9eb5..d67b99f 100644
--- a/tests/gobang.go
+++ b/tests/gobang.go
@@ -14,6 +14,33 @@ import (
+func test_Clamp() {
+ TestStart("Clamp()")
+
+ Testing("equal values", func() {
+ TAssertEqual(Clamp(0, 0, 0), 0)
+ TAssertEqual(Clamp(1, 1, 1), 1)
+ TAssertEqual(Clamp(1.0, 1.0, 1.0), 1.0)
+ })
+
+ Testing("within range", func() {
+ TAssertEqual(Clamp(5, 0, 10), 5)
+ TAssertEqual(Clamp(1.1, 1.0, 1.2), 1.1)
+ TAssertEqual(Clamp(0, 0, 10), 0)
+ TAssertEqual(Clamp(10, 0, 10), 10)
+ })
+
+ Testing("lower than min", func() {
+ TAssertEqual(Clamp(1, 2, 3), 2)
+ TAssertEqual(Clamp(1.0, 1.1, 1.2), 1.1)
+ })
+
+ Testing("greater than max", func() {
+ TAssertEqual(Clamp(1, 11, 10), 10)
+ TAssertEqual(Clamp(1.2, 1.0, 1.1), 1.1)
+ })
+}
+
func test_ValidateSQLTablePrefix() {
TestStart("ValidateSQLTablePrefix()")
@@ -968,6 +995,7 @@ func test_setHostname() {
func MainTest() {
+ test_Clamp()
test_ValidateSQLTablePrefix()
test_WrapErrors()
test_SomeError()