1
0
mirror of https://github.com/IBM/fp-go.git synced 2025-11-23 22:14:53 +02:00
Files
fp-go/v2/tuple/tuple_test.go

2014 lines
56 KiB
Go
Raw Normal View History

Implement v2 using type aliases (#141) * fix: initial checkin of v2 Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: slowly migrate IO Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: migrate MonadTraverseArray and TraverseArray Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: migrate traversal Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: complete migration of IO Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: migrate ioeither Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: refactorY Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: next step in migration Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: adjust IO generation code Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: get rid of more IO methods Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: get rid of more IO * fix: convert iooption Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: convert reader Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: convert a bit of reader Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: new build script Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: cleanup Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: reformat Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: simplify Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: some cleanup Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: adjust Pair to Haskell semantic Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: documentation and testcases Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: some performance optimizations Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: remove coverage Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> * fix: better doc Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com> --------- Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
2025-11-06 09:27:00 +01:00
// Copyright (c) 2023 - 2025 IBM Corp.
// All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tuple
import (
"encoding/json"
"fmt"
"testing"
"github.com/IBM/fp-go/v2/number"
O "github.com/IBM/fp-go/v2/ord"
S "github.com/IBM/fp-go/v2/string"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestString(t *testing.T) {
value := MakeTuple2("Carsten", 1)
assert.Equal(t, "Tuple2[string, int](Carsten, 1)", value.String())
}
func TestMarshal(t *testing.T) {
value := MakeTuple3("Carsten", 1, true)
data, err := json.Marshal(value)
require.NoError(t, err)
var unmarshaled Tuple3[string, int, bool]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, value, unmarshaled)
}
func TestMarshalSmallArray(t *testing.T) {
value := `["Carsten"]`
var unmarshaled Tuple3[string, int, bool]
err := json.Unmarshal([]byte(value), &unmarshaled)
require.NoError(t, err)
assert.Equal(t, MakeTuple3("Carsten", 0, false), unmarshaled)
}
// Test Of function
func TestOf(t *testing.T) {
t1 := Of(42)
assert.Equal(t, Tuple1[int]{F1: 42}, t1)
assert.Equal(t, 42, t1.F1)
}
// Test First and Second functions
func TestFirstSecond(t *testing.T) {
t2 := MakeTuple2("hello", 42)
assert.Equal(t, "hello", First(t2))
assert.Equal(t, 42, Second(t2))
}
// Test Swap function
func TestSwap(t *testing.T) {
t2 := MakeTuple2("hello", 42)
swapped := Swap(t2)
assert.Equal(t, MakeTuple2(42, "hello"), swapped)
assert.Equal(t, 42, swapped.F1)
assert.Equal(t, "hello", swapped.F2)
}
// Test Of2 function
func TestOf2(t *testing.T) {
pairWith42 := Of2[string](42)
result := pairWith42("hello")
assert.Equal(t, MakeTuple2("hello", 42), result)
}
// Test BiMap function
func TestBiMap(t *testing.T) {
t2 := MakeTuple2(5, "hello")
mapper := BiMap(
func(s string) int { return len(s) },
func(n int) string { return fmt.Sprintf("%d", n*2) },
)
result := mapper(t2)
assert.Equal(t, MakeTuple2("10", 5), result)
}
// Test Tupled and Untupled functions
func TestTupled2Untupled2(t *testing.T) {
add := func(a, b int) int { return a + b }
// Test Tupled2
tupledAdd := Tupled2(add)
result := tupledAdd(MakeTuple2(3, 4))
assert.Equal(t, 7, result)
// Test Untupled2
untupledAdd := Untupled2(tupledAdd)
result2 := untupledAdd(5, 6)
assert.Equal(t, 11, result2)
}
func TestTupled3Untupled3(t *testing.T) {
sum3 := func(a, b, c int) int { return a + b + c }
tupled := Tupled3(sum3)
result := tupled(MakeTuple3(1, 2, 3))
assert.Equal(t, 6, result)
untupled := Untupled3(tupled)
result2 := untupled(4, 5, 6)
assert.Equal(t, 15, result2)
}
// Test Map functions
func TestMap1(t *testing.T) {
t1 := MakeTuple1(5)
mapper := Map1(func(n int) string { return fmt.Sprintf("%d", n*2) })
result := mapper(t1)
assert.Equal(t, MakeTuple1("10"), result)
}
func TestMap2(t *testing.T) {
t2 := MakeTuple2(5, "hello")
mapper := Map2(
func(n int) string { return fmt.Sprintf("%d", n*2) },
func(s string) int { return len(s) },
)
result := mapper(t2)
assert.Equal(t, MakeTuple2("10", 5), result)
}
func TestMap3(t *testing.T) {
t3 := MakeTuple3(1, 2, 3)
mapper := Map3(
func(n int) int { return n * 2 },
func(n int) int { return n * 3 },
func(n int) int { return n * 4 },
)
result := mapper(t3)
assert.Equal(t, MakeTuple3(2, 6, 12), result)
}
// Test Replicate functions
func TestReplicate1(t *testing.T) {
result := Replicate1(42)
assert.Equal(t, MakeTuple1(42), result)
}
func TestReplicate2(t *testing.T) {
result := Replicate2(42)
assert.Equal(t, MakeTuple2(42, 42), result)
}
func TestReplicate3(t *testing.T) {
result := Replicate3(42)
assert.Equal(t, MakeTuple3(42, 42, 42), result)
}
// Test ToArray and FromArray functions
func TestToArray1FromArray1(t *testing.T) {
t1 := MakeTuple1(42)
toArray := ToArray1(func(n int) int { return n })
arr := toArray(t1)
assert.Equal(t, []int{42}, arr)
fromArray := FromArray1(func(n int) int { return n })
result := fromArray(arr)
assert.Equal(t, t1, result)
}
func TestToArray2FromArray2(t *testing.T) {
t2 := MakeTuple2(1, 2)
toArray := ToArray2(
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t2)
assert.Equal(t, []int{1, 2}, arr)
fromArray := FromArray2(
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t2, result)
}
func TestToArray3FromArray3(t *testing.T) {
t3 := MakeTuple3(1, 2, 3)
toArray := ToArray3(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t3)
assert.Equal(t, []int{1, 2, 3}, arr)
fromArray := FromArray3(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t3, result)
}
// Test Push functions
func TestPush1(t *testing.T) {
t1 := MakeTuple1(42)
push := Push1[int, string]("hello")
result := push(t1)
assert.Equal(t, MakeTuple2(42, "hello"), result)
}
func TestPush2(t *testing.T) {
t2 := MakeTuple2(1, 2)
push := Push2[int, int, int](3)
result := push(t2)
assert.Equal(t, MakeTuple3(1, 2, 3), result)
}
func TestPush3(t *testing.T) {
t3 := MakeTuple3(1, 2, 3)
push := Push3[int, int, int, int](4)
result := push(t3)
assert.Equal(t, MakeTuple4(1, 2, 3, 4), result)
}
// Test Monoid functions
func TestMonoid1(t *testing.T) {
m := Monoid1(number.MonoidSum[int]())
t1 := MakeTuple1(5)
t2 := MakeTuple1(3)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple1(8), result)
assert.Equal(t, MakeTuple1(0), m.Empty())
}
func TestMonoid2(t *testing.T) {
m := Monoid2(S.Monoid, number.MonoidSum[int]())
t1 := MakeTuple2("hello", 5)
t2 := MakeTuple2(" world", 3)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple2("hello world", 8), result)
assert.Equal(t, MakeTuple2("", 0), m.Empty())
}
func TestMonoid3(t *testing.T) {
m := Monoid3(S.Monoid, number.MonoidSum[int](), number.MonoidProduct[int]())
t1 := MakeTuple3("a", 2, 3)
t2 := MakeTuple3("b", 4, 5)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple3("ab", 6, 15), result)
}
// Test Ord functions
func TestOrd1(t *testing.T) {
o := Ord1(O.FromStrictCompare[int]())
t1 := MakeTuple1(5)
t2 := MakeTuple1(3)
t3 := MakeTuple1(5)
assert.Equal(t, 1, o.Compare(t1, t2))
assert.Equal(t, -1, o.Compare(t2, t1))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
assert.False(t, o.Equals(t1, t2))
}
func TestOrd2(t *testing.T) {
o := Ord2(O.FromStrictCompare[string](), O.FromStrictCompare[int]())
t1 := MakeTuple2("a", 1)
t2 := MakeTuple2("b", 2)
t3 := MakeTuple2("a", 1)
t4 := MakeTuple2("a", 2)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 1, o.Compare(t2, t1))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.Equal(t, -1, o.Compare(t1, t4))
assert.True(t, o.Equals(t1, t3))
assert.False(t, o.Equals(t1, t2))
}
func TestOrd3(t *testing.T) {
o := Ord3(O.FromStrictCompare[int](), O.FromStrictCompare[int](), O.FromStrictCompare[int]())
t1 := MakeTuple3(1, 2, 3)
t2 := MakeTuple3(1, 2, 4)
t3 := MakeTuple3(1, 2, 3)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
// Test String methods for different tuple sizes
func TestTuple1String(t *testing.T) {
t1 := MakeTuple1(42)
assert.Equal(t, "Tuple1[int](42)", t1.String())
}
func TestTuple3String(t *testing.T) {
t3 := MakeTuple3("test", 42, true)
assert.Equal(t, "Tuple3[string, int, bool](test, 42, true)", t3.String())
}
func TestTuple4String(t *testing.T) {
t4 := MakeTuple4(1, 2, 3, 4)
assert.Equal(t, "Tuple4[int, int, int, int](1, 2, 3, 4)", t4.String())
}
// Test JSON marshaling for different tuple sizes
func TestTuple1JSON(t *testing.T) {
t1 := MakeTuple1(42)
data, err := json.Marshal(t1)
require.NoError(t, err)
assert.Equal(t, "[42]", string(data))
var unmarshaled Tuple1[int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t1, unmarshaled)
}
func TestTuple2JSON(t *testing.T) {
t2 := MakeTuple2("hello", 42)
data, err := json.Marshal(t2)
require.NoError(t, err)
var unmarshaled Tuple2[string, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t2, unmarshaled)
}
func TestTuple4JSON(t *testing.T) {
t4 := MakeTuple4(1, 2, 3, 4)
data, err := json.Marshal(t4)
require.NoError(t, err)
var unmarshaled Tuple4[int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t4, unmarshaled)
}
func TestTuple5JSON(t *testing.T) {
t5 := MakeTuple5(1, 2, 3, 4, 5)
data, err := json.Marshal(t5)
require.NoError(t, err)
var unmarshaled Tuple5[int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t5, unmarshaled)
}
// Test JSON unmarshal error cases
func TestUnmarshalInvalidJSON(t *testing.T) {
var t2 Tuple2[string, int]
err := json.Unmarshal([]byte("invalid json"), &t2)
assert.Error(t, err)
}
func TestUnmarshalInvalidType(t *testing.T) {
var t2 Tuple2[int, int]
err := json.Unmarshal([]byte(`["string", 42]`), &t2)
assert.Error(t, err)
}
// Test MakeTuple functions for various sizes
func TestMakeTuple4(t *testing.T) {
t4 := MakeTuple4(1, "two", 3.0, true)
assert.Equal(t, 1, t4.F1)
assert.Equal(t, "two", t4.F2)
assert.Equal(t, 3.0, t4.F3)
assert.Equal(t, true, t4.F4)
}
func TestMakeTuple5(t *testing.T) {
t5 := MakeTuple5(1, 2, 3, 4, 5)
assert.Equal(t, 1, t5.F1)
assert.Equal(t, 5, t5.F5)
}
func TestMakeTuple6(t *testing.T) {
t6 := MakeTuple6(1, 2, 3, 4, 5, 6)
assert.Equal(t, 1, t6.F1)
assert.Equal(t, 6, t6.F6)
}
// Test Tupled/Untupled for larger tuples
func TestTupled4Untupled4(t *testing.T) {
sum4 := func(a, b, c, d int) int { return a + b + c + d }
tupled := Tupled4(sum4)
result := tupled(MakeTuple4(1, 2, 3, 4))
assert.Equal(t, 10, result)
untupled := Untupled4(tupled)
result2 := untupled(2, 3, 4, 5)
assert.Equal(t, 14, result2)
}
func TestTupled5Untupled5(t *testing.T) {
sum5 := func(a, b, c, d, e int) int { return a + b + c + d + e }
tupled := Tupled5(sum5)
result := tupled(MakeTuple5(1, 2, 3, 4, 5))
assert.Equal(t, 15, result)
untupled := Untupled5(tupled)
result2 := untupled(1, 1, 1, 1, 1)
assert.Equal(t, 5, result2)
}
// Test Map for larger tuples
func TestMap4(t *testing.T) {
t4 := MakeTuple4(1, 2, 3, 4)
mapper := Map4(
func(n int) int { return n * 2 },
func(n int) int { return n * 3 },
func(n int) int { return n * 4 },
func(n int) int { return n * 5 },
)
result := mapper(t4)
assert.Equal(t, MakeTuple4(2, 6, 12, 20), result)
}
func TestMap5(t *testing.T) {
t5 := MakeTuple5(1, 2, 3, 4, 5)
mapper := Map5(
func(n int) int { return n + 1 },
func(n int) int { return n + 2 },
func(n int) int { return n + 3 },
func(n int) int { return n + 4 },
func(n int) int { return n + 5 },
)
result := mapper(t5)
assert.Equal(t, MakeTuple5(2, 4, 6, 8, 10), result)
}
// Test Replicate for larger tuples
func TestReplicate4(t *testing.T) {
result := Replicate4(7)
assert.Equal(t, MakeTuple4(7, 7, 7, 7), result)
}
func TestReplicate5(t *testing.T) {
result := Replicate5(9)
assert.Equal(t, MakeTuple5(9, 9, 9, 9, 9), result)
}
// Test ToArray/FromArray for larger tuples
func TestToArray4FromArray4(t *testing.T) {
t4 := MakeTuple4(1, 2, 3, 4)
toArray := ToArray4(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t4)
assert.Equal(t, []int{1, 2, 3, 4}, arr)
fromArray := FromArray4(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t4, result)
}
func TestToArray5FromArray5(t *testing.T) {
t5 := MakeTuple5(1, 2, 3, 4, 5)
toArray := ToArray5(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t5)
assert.Equal(t, []int{1, 2, 3, 4, 5}, arr)
fromArray := FromArray5(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t5, result)
}
// Test Push for larger tuples
func TestPush4(t *testing.T) {
t4 := MakeTuple4(1, 2, 3, 4)
push := Push4[int, int, int, int, int](5)
result := push(t4)
assert.Equal(t, MakeTuple5(1, 2, 3, 4, 5), result)
}
func TestPush5(t *testing.T) {
t5 := MakeTuple5(1, 2, 3, 4, 5)
push := Push5[int, int, int, int, int, int](6)
result := push(t5)
assert.Equal(t, MakeTuple6(1, 2, 3, 4, 5, 6), result)
}
// Test Monoid for larger tuples
func TestMonoid4(t *testing.T) {
m := Monoid4(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple4(1, 2, 3, 4)
t2 := MakeTuple4(5, 6, 7, 8)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple4(6, 8, 10, 12), result)
}
func TestMonoid5(t *testing.T) {
m := Monoid5(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple5(1, 2, 3, 4, 5)
t2 := MakeTuple5(1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple5(2, 3, 4, 5, 6), result)
}
// Test Ord for larger tuples
func TestOrd4(t *testing.T) {
o := Ord4(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple4(1, 2, 3, 4)
t2 := MakeTuple4(1, 2, 3, 5)
t3 := MakeTuple4(1, 2, 3, 4)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd5(t *testing.T) {
o := Ord5(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple5(1, 2, 3, 4, 5)
t2 := MakeTuple5(1, 2, 3, 4, 6)
t3 := MakeTuple5(1, 2, 3, 4, 5)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
// Test larger tuple sizes (6-10)
func TestMakeTuple7(t *testing.T) {
t7 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
assert.Equal(t, 1, t7.F1)
assert.Equal(t, 7, t7.F7)
}
func TestMakeTuple8(t *testing.T) {
t8 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
assert.Equal(t, 1, t8.F1)
assert.Equal(t, 8, t8.F8)
}
func TestMakeTuple9(t *testing.T) {
t9 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
assert.Equal(t, 1, t9.F1)
assert.Equal(t, 9, t9.F9)
}
func TestMakeTuple10(t *testing.T) {
t10 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
assert.Equal(t, 1, t10.F1)
assert.Equal(t, 10, t10.F10)
}
// Test Tupled/Untupled for sizes 6-10
func TestTupled6Untupled6(t *testing.T) {
sum6 := func(a, b, c, d, e, f int) int { return a + b + c + d + e + f }
tupled := Tupled6(sum6)
result := tupled(MakeTuple6(1, 2, 3, 4, 5, 6))
assert.Equal(t, 21, result)
untupled := Untupled6(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1)
assert.Equal(t, 6, result2)
}
func TestTupled7Untupled7(t *testing.T) {
sum7 := func(a, b, c, d, e, f, g int) int { return a + b + c + d + e + f + g }
tupled := Tupled7(sum7)
result := tupled(MakeTuple7(1, 2, 3, 4, 5, 6, 7))
assert.Equal(t, 28, result)
untupled := Untupled7(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 7, result2)
}
func TestTupled8Untupled8(t *testing.T) {
sum8 := func(a, b, c, d, e, f, g, h int) int { return a + b + c + d + e + f + g + h }
tupled := Tupled8(sum8)
result := tupled(MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8))
assert.Equal(t, 36, result)
untupled := Untupled8(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 8, result2)
}
func TestTupled9Untupled9(t *testing.T) {
sum9 := func(a, b, c, d, e, f, g, h, i int) int { return a + b + c + d + e + f + g + h + i }
tupled := Tupled9(sum9)
result := tupled(MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9))
assert.Equal(t, 45, result)
untupled := Untupled9(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 9, result2)
}
func TestTupled10Untupled10(t *testing.T) {
sum10 := func(a, b, c, d, e, f, g, h, i, j int) int { return a + b + c + d + e + f + g + h + i + j }
tupled := Tupled10(sum10)
result := tupled(MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
assert.Equal(t, 55, result)
untupled := Untupled10(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 10, result2)
}
// Test Map for sizes 6-10
func TestMap6(t *testing.T) {
t6 := MakeTuple6(1, 2, 3, 4, 5, 6)
mapper := Map6(
func(n int) int { return n + 1 },
func(n int) int { return n + 2 },
func(n int) int { return n + 3 },
func(n int) int { return n + 4 },
func(n int) int { return n + 5 },
func(n int) int { return n + 6 },
)
result := mapper(t6)
assert.Equal(t, MakeTuple6(2, 4, 6, 8, 10, 12), result)
}
func TestMap7(t *testing.T) {
t7 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
mapper := Map7(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t7)
assert.Equal(t, MakeTuple7(2, 4, 6, 8, 10, 12, 14), result)
}
func TestMap8(t *testing.T) {
t8 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
mapper := Map8(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t8)
assert.Equal(t, MakeTuple8(2, 4, 6, 8, 10, 12, 14, 16), result)
}
func TestMap9(t *testing.T) {
t9 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
mapper := Map9(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t9)
assert.Equal(t, MakeTuple9(2, 4, 6, 8, 10, 12, 14, 16, 18), result)
}
func TestMap10(t *testing.T) {
t10 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
mapper := Map10(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t10)
assert.Equal(t, MakeTuple10(2, 4, 6, 8, 10, 12, 14, 16, 18, 20), result)
}
// Test Replicate for sizes 6-10
func TestReplicate6(t *testing.T) {
result := Replicate6(11)
assert.Equal(t, MakeTuple6(11, 11, 11, 11, 11, 11), result)
}
func TestReplicate7(t *testing.T) {
result := Replicate7(13)
assert.Equal(t, MakeTuple7(13, 13, 13, 13, 13, 13, 13), result)
}
func TestReplicate8(t *testing.T) {
result := Replicate8(15)
assert.Equal(t, MakeTuple8(15, 15, 15, 15, 15, 15, 15, 15), result)
}
func TestReplicate9(t *testing.T) {
result := Replicate9(17)
assert.Equal(t, MakeTuple9(17, 17, 17, 17, 17, 17, 17, 17, 17), result)
}
func TestReplicate10(t *testing.T) {
result := Replicate10(19)
assert.Equal(t, MakeTuple10(19, 19, 19, 19, 19, 19, 19, 19, 19, 19), result)
}
// Test ToArray/FromArray for sizes 6-10
func TestToArray6FromArray6(t *testing.T) {
t6 := MakeTuple6(1, 2, 3, 4, 5, 6)
toArray := ToArray6(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t6)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6}, arr)
fromArray := FromArray6(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t6, result)
}
func TestToArray7FromArray7(t *testing.T) {
t7 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
toArray := ToArray7(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t7)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7}, arr)
fromArray := FromArray7(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t7, result)
}
func TestToArray8FromArray8(t *testing.T) {
t8 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
toArray := ToArray8(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t8)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8}, arr)
fromArray := FromArray8(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t8, result)
}
func TestToArray9FromArray9(t *testing.T) {
t9 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
toArray := ToArray9(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t9)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9}, arr)
fromArray := FromArray9(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t9, result)
}
func TestToArray10FromArray10(t *testing.T) {
t10 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
toArray := ToArray10(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t10)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, arr)
fromArray := FromArray10(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t10, result)
}
// Test Push for sizes 6-10
func TestPush6(t *testing.T) {
t6 := MakeTuple6(1, 2, 3, 4, 5, 6)
push := Push6[int, int, int, int, int, int, int](7)
result := push(t6)
assert.Equal(t, MakeTuple7(1, 2, 3, 4, 5, 6, 7), result)
}
func TestPush7(t *testing.T) {
t7 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
push := Push7[int, int, int, int, int, int, int, int](8)
result := push(t7)
assert.Equal(t, MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8), result)
}
func TestPush8(t *testing.T) {
t8 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
push := Push8[int, int, int, int, int, int, int, int, int](9)
result := push(t8)
assert.Equal(t, MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9), result)
}
func TestPush9(t *testing.T) {
t9 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
push := Push9[int, int, int, int, int, int, int, int, int, int](10)
result := push(t9)
assert.Equal(t, MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), result)
}
// Test String methods for sizes 5-10
func TestTuple5String(t *testing.T) {
t5 := MakeTuple5(1, 2, 3, 4, 5)
assert.Equal(t, "Tuple5[int, int, int, int, int](1, 2, 3, 4, 5)", t5.String())
}
func TestTuple6String(t *testing.T) {
t6 := MakeTuple6(1, 2, 3, 4, 5, 6)
assert.Equal(t, "Tuple6[int, int, int, int, int, int](1, 2, 3, 4, 5, 6)", t6.String())
}
func TestTuple7String(t *testing.T) {
t7 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
assert.Equal(t, "Tuple7[int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7)", t7.String())
}
func TestTuple8String(t *testing.T) {
t8 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
assert.Equal(t, "Tuple8[int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8)", t8.String())
}
func TestTuple9String(t *testing.T) {
t9 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
assert.Equal(t, "Tuple9[int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9)", t9.String())
}
func TestTuple10String(t *testing.T) {
t10 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
assert.Equal(t, "Tuple10[int, int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10)", t10.String())
}
// Test JSON for sizes 6-10
func TestTuple6JSON(t *testing.T) {
t6 := MakeTuple6(1, 2, 3, 4, 5, 6)
data, err := json.Marshal(t6)
require.NoError(t, err)
var unmarshaled Tuple6[int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t6, unmarshaled)
}
func TestTuple7JSON(t *testing.T) {
t7 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
data, err := json.Marshal(t7)
require.NoError(t, err)
var unmarshaled Tuple7[int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t7, unmarshaled)
}
func TestTuple8JSON(t *testing.T) {
t8 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
data, err := json.Marshal(t8)
require.NoError(t, err)
var unmarshaled Tuple8[int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t8, unmarshaled)
}
func TestTuple9JSON(t *testing.T) {
t9 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
data, err := json.Marshal(t9)
require.NoError(t, err)
var unmarshaled Tuple9[int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t9, unmarshaled)
}
func TestTuple10JSON(t *testing.T) {
t10 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
data, err := json.Marshal(t10)
require.NoError(t, err)
var unmarshaled Tuple10[int, int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t10, unmarshaled)
}
// Test Monoid for sizes 6-10
func TestMonoid6(t *testing.T) {
m := Monoid6(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple6(1, 2, 3, 4, 5, 6)
t2 := MakeTuple6(1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple6(2, 3, 4, 5, 6, 7), result)
}
func TestMonoid7(t *testing.T) {
m := Monoid7(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
t2 := MakeTuple7(1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple7(2, 3, 4, 5, 6, 7, 8), result)
}
func TestMonoid8(t *testing.T) {
m := Monoid8(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
t2 := MakeTuple8(1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple8(2, 3, 4, 5, 6, 7, 8, 9), result)
}
func TestMonoid9(t *testing.T) {
m := Monoid9(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
t2 := MakeTuple9(1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple9(2, 3, 4, 5, 6, 7, 8, 9, 10), result)
}
func TestMonoid10(t *testing.T) {
m := Monoid10(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
t2 := MakeTuple10(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple10(2, 3, 4, 5, 6, 7, 8, 9, 10, 11), result)
}
// Test Ord for sizes 6-10
func TestOrd6(t *testing.T) {
o := Ord6(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple6(1, 2, 3, 4, 5, 6)
t2 := MakeTuple6(1, 2, 3, 4, 5, 7)
t3 := MakeTuple6(1, 2, 3, 4, 5, 6)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd7(t *testing.T) {
o := Ord7(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
t2 := MakeTuple7(1, 2, 3, 4, 5, 6, 8)
t3 := MakeTuple7(1, 2, 3, 4, 5, 6, 7)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd8(t *testing.T) {
o := Ord8(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
t2 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 9)
t3 := MakeTuple8(1, 2, 3, 4, 5, 6, 7, 8)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd9(t *testing.T) {
o := Ord9(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
t2 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 10)
t3 := MakeTuple9(1, 2, 3, 4, 5, 6, 7, 8, 9)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd10(t *testing.T) {
o := Ord10(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
t2 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 11)
t3 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
// Test tuple sizes 11-15
func TestMakeTuple11(t *testing.T) {
t11 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
assert.Equal(t, 1, t11.F1)
assert.Equal(t, 11, t11.F11)
}
func TestMakeTuple12(t *testing.T) {
t12 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
assert.Equal(t, 1, t12.F1)
assert.Equal(t, 12, t12.F12)
}
func TestMakeTuple13(t *testing.T) {
t13 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
assert.Equal(t, 1, t13.F1)
assert.Equal(t, 13, t13.F13)
}
func TestMakeTuple14(t *testing.T) {
t14 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
assert.Equal(t, 1, t14.F1)
assert.Equal(t, 14, t14.F14)
}
func TestMakeTuple15(t *testing.T) {
t15 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
assert.Equal(t, 1, t15.F1)
assert.Equal(t, 15, t15.F15)
}
// Test Tupled/Untupled for sizes 11-15
func TestTupled11Untupled11(t *testing.T) {
sum11 := func(a, b, c, d, e, f, g, h, i, j, k int) int {
return a + b + c + d + e + f + g + h + i + j + k
}
tupled := Tupled11(sum11)
result := tupled(MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11))
assert.Equal(t, 66, result)
untupled := Untupled11(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 11, result2)
}
func TestTupled12Untupled12(t *testing.T) {
sum12 := func(a, b, c, d, e, f, g, h, i, j, k, l int) int {
return a + b + c + d + e + f + g + h + i + j + k + l
}
tupled := Tupled12(sum12)
result := tupled(MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))
assert.Equal(t, 78, result)
untupled := Untupled12(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 12, result2)
}
func TestTupled13Untupled13(t *testing.T) {
sum13 := func(a, b, c, d, e, f, g, h, i, j, k, l, m int) int {
return a + b + c + d + e + f + g + h + i + j + k + l + m
}
tupled := Tupled13(sum13)
result := tupled(MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13))
assert.Equal(t, 91, result)
untupled := Untupled13(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 13, result2)
}
func TestTupled14Untupled14(t *testing.T) {
sum14 := func(a, b, c, d, e, f, g, h, i, j, k, l, m, n int) int {
return a + b + c + d + e + f + g + h + i + j + k + l + m + n
}
tupled := Tupled14(sum14)
result := tupled(MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
assert.Equal(t, 105, result)
untupled := Untupled14(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 14, result2)
}
func TestTupled15Untupled15(t *testing.T) {
sum15 := func(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o int) int {
return a + b + c + d + e + f + g + h + i + j + k + l + m + n + o
}
tupled := Tupled15(sum15)
result := tupled(MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15))
assert.Equal(t, 120, result)
untupled := Untupled15(tupled)
result2 := untupled(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
assert.Equal(t, 15, result2)
}
// Test Map for sizes 11-15
func TestMap11(t *testing.T) {
t11 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
mapper := Map11(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t11)
assert.Equal(t, MakeTuple11(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22), result)
}
func TestMap12(t *testing.T) {
t12 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
mapper := Map12(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t12)
assert.Equal(t, MakeTuple12(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24), result)
}
func TestMap13(t *testing.T) {
t13 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
mapper := Map13(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t13)
assert.Equal(t, MakeTuple13(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26), result)
}
func TestMap14(t *testing.T) {
t14 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
mapper := Map14(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t14)
assert.Equal(t, MakeTuple14(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28), result)
}
func TestMap15(t *testing.T) {
t15 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
mapper := Map15(
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
func(n int) int { return n * 2 },
)
result := mapper(t15)
assert.Equal(t, MakeTuple15(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30), result)
}
// Test Replicate for sizes 11-15
func TestReplicate11(t *testing.T) {
result := Replicate11(21)
assert.Equal(t, MakeTuple11(21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21), result)
}
func TestReplicate12(t *testing.T) {
result := Replicate12(23)
assert.Equal(t, MakeTuple12(23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23), result)
}
func TestReplicate13(t *testing.T) {
result := Replicate13(25)
assert.Equal(t, MakeTuple13(25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25), result)
}
func TestReplicate14(t *testing.T) {
result := Replicate14(27)
assert.Equal(t, MakeTuple14(27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27), result)
}
func TestReplicate15(t *testing.T) {
result := Replicate15(29)
assert.Equal(t, MakeTuple15(29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29), result)
}
// Test ToArray/FromArray for sizes 11-15
func TestToArray11FromArray11(t *testing.T) {
t11 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
toArray := ToArray11(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t11)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, arr)
fromArray := FromArray11(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t11, result)
}
func TestToArray12FromArray12(t *testing.T) {
t12 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
toArray := ToArray12(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t12)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, arr)
fromArray := FromArray12(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t12, result)
}
func TestToArray13FromArray13(t *testing.T) {
t13 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
toArray := ToArray13(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t13)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, arr)
fromArray := FromArray13(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t13, result)
}
func TestToArray14FromArray14(t *testing.T) {
t14 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
toArray := ToArray14(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t14)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, arr)
fromArray := FromArray14(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t14, result)
}
func TestToArray15FromArray15(t *testing.T) {
t15 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
toArray := ToArray15(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
arr := toArray(t15)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, arr)
fromArray := FromArray15(
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
func(n int) int { return n },
)
result := fromArray(arr)
assert.Equal(t, t15, result)
}
// Test Push for sizes 10-14
func TestPush10(t *testing.T) {
t10 := MakeTuple10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
push := Push10[int, int, int, int, int, int, int, int, int, int, int](11)
result := push(t10)
assert.Equal(t, MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), result)
}
func TestPush11(t *testing.T) {
t11 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
push := Push11[int, int, int, int, int, int, int, int, int, int, int, int](12)
result := push(t11)
assert.Equal(t, MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), result)
}
func TestPush12(t *testing.T) {
t12 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
push := Push12[int, int, int, int, int, int, int, int, int, int, int, int, int](13)
result := push(t12)
assert.Equal(t, MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), result)
}
func TestPush13(t *testing.T) {
t13 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
push := Push13[int, int, int, int, int, int, int, int, int, int, int, int, int, int](14)
result := push(t13)
assert.Equal(t, MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), result)
}
func TestPush14(t *testing.T) {
t14 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
push := Push14[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int](15)
result := push(t14)
assert.Equal(t, MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), result)
}
// Test String methods for sizes 11-15
func TestTuple11String(t *testing.T) {
t11 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
assert.Equal(t, "Tuple11[int, int, int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)", t11.String())
}
func TestTuple12String(t *testing.T) {
t12 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
assert.Equal(t, "Tuple12[int, int, int, int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)", t12.String())
}
func TestTuple13String(t *testing.T) {
t13 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
assert.Equal(t, "Tuple13[int, int, int, int, int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)", t13.String())
}
func TestTuple14String(t *testing.T) {
t14 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
assert.Equal(t, "Tuple14[int, int, int, int, int, int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)", t14.String())
}
func TestTuple15String(t *testing.T) {
t15 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
assert.Equal(t, "Tuple15[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)", t15.String())
}
// Test JSON for sizes 11-15
func TestTuple11JSON(t *testing.T) {
t11 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
data, err := json.Marshal(t11)
require.NoError(t, err)
var unmarshaled Tuple11[int, int, int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t11, unmarshaled)
}
func TestTuple12JSON(t *testing.T) {
t12 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
data, err := json.Marshal(t12)
require.NoError(t, err)
var unmarshaled Tuple12[int, int, int, int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t12, unmarshaled)
}
func TestTuple13JSON(t *testing.T) {
t13 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
data, err := json.Marshal(t13)
require.NoError(t, err)
var unmarshaled Tuple13[int, int, int, int, int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t13, unmarshaled)
}
func TestTuple14JSON(t *testing.T) {
t14 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
data, err := json.Marshal(t14)
require.NoError(t, err)
var unmarshaled Tuple14[int, int, int, int, int, int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t14, unmarshaled)
}
func TestTuple15JSON(t *testing.T) {
t15 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
data, err := json.Marshal(t15)
require.NoError(t, err)
var unmarshaled Tuple15[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]
err = json.Unmarshal(data, &unmarshaled)
require.NoError(t, err)
assert.Equal(t, t15, unmarshaled)
}
// Test Monoid for sizes 11-15
func TestMonoid11(t *testing.T) {
m := Monoid11(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
t2 := MakeTuple11(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple11(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), result)
}
func TestMonoid12(t *testing.T) {
m := Monoid12(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
t2 := MakeTuple12(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple12(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), result)
}
func TestMonoid13(t *testing.T) {
m := Monoid13(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
t2 := MakeTuple13(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple13(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), result)
}
func TestMonoid14(t *testing.T) {
m := Monoid14(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
t2 := MakeTuple14(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple14(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), result)
}
func TestMonoid15(t *testing.T) {
m := Monoid15(
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
number.MonoidSum[int](),
)
t1 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
t2 := MakeTuple15(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
result := m.Concat(t1, t2)
assert.Equal(t, MakeTuple15(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), result)
}
// Test Ord for sizes 11-15
func TestOrd11(t *testing.T) {
o := Ord11(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
t2 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12)
t3 := MakeTuple11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd12(t *testing.T) {
o := Ord12(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
t2 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13)
t3 := MakeTuple12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd13(t *testing.T) {
o := Ord13(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
t2 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14)
t3 := MakeTuple13(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd14(t *testing.T) {
o := Ord14(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
t2 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15)
t3 := MakeTuple14(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}
func TestOrd15(t *testing.T) {
o := Ord15(
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
O.FromStrictCompare[int](),
)
t1 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
t2 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16)
t3 := MakeTuple15(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
assert.Equal(t, -1, o.Compare(t1, t2))
assert.Equal(t, 0, o.Compare(t1, t3))
assert.True(t, o.Equals(t1, t3))
}