size_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package validate
  2. import (
  3. "errors"
  4. "fmt"
  5. "testing"
  6. )
  7. func ExampleMaxSize() {
  8. testMaxSize := MaxSize[string](3)
  9. fmt.Println(testMaxSize([]string{"abc", "def", "ghi", "jkl"}))
  10. // Output: must have no more than 3 items
  11. }
  12. func ExampleMinSize() {
  13. testMaxSize := MinSize[string](3)
  14. fmt.Println(testMaxSize([]string{"abc", "def"}))
  15. // Output: must have at least 3 items
  16. }
  17. func TestMaxSize(t *testing.T) {
  18. testCases := map[int]map[int]error{
  19. 0: {0: nil, 1: ErrMustHaveFewerItems.With(0), 2: ErrMustHaveFewerItems.With(0), 10: ErrMustHaveFewerItems.With(0)},
  20. 1: {0: nil, 1: nil, 2: ErrMustHaveFewerItems.With(1), 10: ErrMustHaveFewerItems.With(1)},
  21. 2: {0: nil, 1: nil, 2: nil, 10: ErrMustHaveFewerItems.With(2)},
  22. 10: {0: nil, 1: nil, 2: nil, 10: nil},
  23. 100: {0: nil, 1: nil, 2: nil, 10: nil},
  24. }
  25. for max, values := range testCases {
  26. testMaxSize := MaxSize[int](max)
  27. for l, want := range values {
  28. t.Run(fmt.Sprintf("%d/%d", max, l), func(t *testing.T) {
  29. input := []int{}
  30. for i := 0; i < l; i++ {
  31. input = append(input, i)
  32. }
  33. got := testMaxSize(input)
  34. if !errors.Is(got, want) {
  35. t.Error("got", got)
  36. t.Error("want", want)
  37. }
  38. })
  39. }
  40. }
  41. }
  42. func TestMinSize(t *testing.T) {
  43. testCases := map[int]map[int]error{
  44. 0: {0: nil, 1: nil, 2: nil, 10: nil},
  45. 1: {0: ErrMustHaveMoreItems.With(1), 1: nil, 2: nil, 10: nil},
  46. 2: {0: ErrMustHaveMoreItems.With(2), 1: ErrMustHaveMoreItems.With(2), 2: nil, 10: nil},
  47. 10: {0: ErrMustHaveMoreItems.With(10), 1: ErrMustHaveMoreItems.With(10), 2: ErrMustHaveMoreItems.With(10), 10: nil},
  48. 100: {0: ErrMustHaveMoreItems.With(100), 1: ErrMustHaveMoreItems.With(100), 2: ErrMustHaveMoreItems.With(100), 10: ErrMustHaveMoreItems.With(100)},
  49. }
  50. for min, values := range testCases {
  51. testMinSize := MinSize[int](min)
  52. for l, want := range values {
  53. t.Run(fmt.Sprintf("%d/%d", min, l), func(t *testing.T) {
  54. input := []int{}
  55. for i := 0; i < l; i++ {
  56. input = append(input, i)
  57. }
  58. got := testMinSize(input)
  59. if !errors.Is(got, want) {
  60. t.Error("got", got)
  61. t.Error("want", want)
  62. }
  63. })
  64. }
  65. }
  66. }