main_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "slices"
  4. "testing"
  5. )
  6. func TestExamples(t *testing.T) {
  7. cases := []struct {
  8. start []uint64
  9. steps int
  10. expected []uint64
  11. }{
  12. {[]uint64{0, 1, 10, 99, 999}, 1,
  13. []uint64{1, 2024, 1, 0, 9, 9, 2021976},
  14. },
  15. {[]uint64{125, 17}, 6,
  16. []uint64{2097446912, 14168, 4048, 2, 0, 2, 4, 40, 48, 2024, 40, 48, 80, 96, 2, 8, 6, 7, 6, 0, 3, 2},
  17. },
  18. }
  19. for _, c := range cases {
  20. actual := make([]uint64, 0, 64)
  21. previous := make([]uint64, len(c.start), 64)
  22. copy(previous, c.start)
  23. for i := 0; i < c.steps; i++ {
  24. actual = actual[:0]
  25. actual = step(previous, actual)
  26. if len(actual) > len(previous) {
  27. previous = make([]uint64, len(actual), 2*len(previous))
  28. }
  29. copy(previous, actual)
  30. }
  31. if !slices.Equal(actual, c.expected) {
  32. t.Errorf("expected %v; got %v", c.expected, actual)
  33. }
  34. }
  35. }
  36. func TestExample2(t *testing.T) {
  37. start := []uint64{125, 17}
  38. expected := 55312
  39. actual := make([]uint64, 0, 64)
  40. previous := make([]uint64, len(start), 64)
  41. copy(previous, start)
  42. for i := 0; i < 25; i++ {
  43. actual = actual[:0]
  44. actual = step(previous, actual)
  45. if len(actual) > len(previous) {
  46. previous = make([]uint64, len(actual), 2*len(previous))
  47. }
  48. copy(previous, actual)
  49. }
  50. if len(actual) != expected {
  51. t.Errorf("expected %d; got %d", expected, len(actual))
  52. }
  53. }