123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package main
- import (
- "slices"
- "testing"
- )
- func TestExamples(t *testing.T) {
- cases := []struct {
- start []uint64
- steps int
- expected []uint64
- }{
- {[]uint64{0, 1, 10, 99, 999}, 1,
- []uint64{1, 2024, 1, 0, 9, 9, 2021976},
- },
- {[]uint64{125, 17}, 6,
- []uint64{2097446912, 14168, 4048, 2, 0, 2, 4, 40, 48, 2024, 40, 48, 80, 96, 2, 8, 6, 7, 6, 0, 3, 2},
- },
- }
- for _, c := range cases {
- actual := make([]uint64, 0, 64)
- previous := make([]uint64, len(c.start), 64)
- copy(previous, c.start)
- for i := 0; i < c.steps; i++ {
- actual = actual[:0]
- actual = step(previous, actual)
- if len(actual) > len(previous) {
- previous = make([]uint64, len(actual), 2*len(previous))
- }
- copy(previous, actual)
- }
- if !slices.Equal(actual, c.expected) {
- t.Errorf("expected %v; got %v", c.expected, actual)
- }
- }
- }
- func TestExample2(t *testing.T) {
- start := []uint64{125, 17}
- expected := 55312
- actual := make([]uint64, 0, 64)
- previous := make([]uint64, len(start), 64)
- copy(previous, start)
- for i := 0; i < 25; i++ {
- actual = actual[:0]
- actual = step(previous, actual)
- if len(actual) > len(previous) {
- previous = make([]uint64, len(actual), 2*len(previous))
- }
- copy(previous, actual)
- }
- if len(actual) != expected {
- t.Errorf("expected %d; got %d", expected, len(actual))
- }
- }
|