From d5ced343c4fc98989b8ff7459c23279cc6878609 Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Sat, 2 May 2026 14:44:52 +0200 Subject: [PATCH] kern/compare.go: new function Equal(a,b) that returns true if a and b have the same value --- kern/compare.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 kern/compare.go diff --git a/kern/compare.go b/kern/compare.go new file mode 100644 index 0000000..5685a73 --- /dev/null +++ b/kern/compare.go @@ -0,0 +1,34 @@ +package kern + +import "reflect" + +func Equal(value1, value2 any) (equal bool) { + if value1 == nil && value2 == nil { + equal = true + } else if value1 == nil || value2 == nil { + equal = false + } else if IsBool(value1) && IsBool(value2) { + equal = value1.(bool) == value2.(bool) + } else if IsList(value1) && IsList(value2) { + ls1 := value1.(*ListType) + ls2 := value2.(*ListType) + equal = ls1.Equals(*ls2) + } else if IsDict(value1) && IsDict(value2) { + d1 := value1.(*DictType) + d2 := value2.(*DictType) + equal = d1.Equals(*d2) + } else if IsInteger(value1) && IsInteger(value2) { + equal = value1.(int64) == value2.(int64) + } else if IsString(value1) && IsString(value2) { + equal = value1.(string) == value2.(string) + } else if IsFloat(value1) && IsFloat(value2) { + equal = value1.(float64) == value2.(float64) + } else if IsNumOrFract(value1) && IsNumOrFract(value2) { + if eq, err := CmpAnyFract(value1, value2); err == nil { + equal = eq == 0 + } + } else if !reflect.DeepEqual(value1, value2) { + equal = false + } + return +}