main_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Author: simon
  2. // Author: ynwdlxm@163.com
  3. // Date: 2025/2/10 10:01
  4. // Desc:
  5. package main
  6. import (
  7. "bytes"
  8. "errors"
  9. "io"
  10. "os"
  11. "path/filepath"
  12. "testing"
  13. )
  14. func TestRun(t *testing.T) {
  15. testCases := []struct {
  16. name string
  17. col int
  18. op string
  19. exp string
  20. files []string
  21. expErr error
  22. }{
  23. {name: "RunAvg1File", col: 3, op: "avg", exp: "227.6\n", files: []string{"./testdata/example.csv"}, expErr: nil},
  24. {name: "RunAvgMultiFiles", col: 3, op: "avg", exp: "233.84\n", files: []string{"./testdata/example.csv", "./testdata/example2.csv"}, expErr: nil},
  25. {name: "RunFailedRead", col: 2, op: "avg", exp: "", files: []string{"./testdata/example.csv", "./testdata/fakefile.csv"}, expErr: os.ErrNotExist},
  26. {name: "RunFailCol", col: 0, op: "avg", exp: "", files: []string{"./testdata/example.csv"}, expErr: ErrInvalidColumn},
  27. {name: "RunFailNoFiles", col: 2, op: "avg", exp: "", files: []string{}, expErr: ErrNoFiles},
  28. {name: "RunFailOperation", col: 2, op: "invalid", exp: "", files: []string{"./testdata/example.csv"}, expErr: ErrInvalidOperation},
  29. }
  30. for _, tc := range testCases {
  31. t.Run(tc.name, func(t *testing.T) {
  32. var res bytes.Buffer
  33. err := run(tc.files, tc.op, tc.col, &res)
  34. if tc.expErr != nil {
  35. if err == nil {
  36. t.Errorf("Expected error. Got nil instead")
  37. }
  38. if !errors.Is(err, tc.expErr) {
  39. t.Errorf("Expected error %q, got %q instead", tc.expErr, err)
  40. }
  41. return
  42. }
  43. if err != nil {
  44. t.Errorf("Unexpected error: %q", err)
  45. }
  46. if res.String() != tc.exp {
  47. t.Errorf("Expected %q, got %q instead", tc.exp, &res)
  48. }
  49. })
  50. }
  51. }
  52. func BenchmarkRun(b *testing.B) {
  53. filenames, err := filepath.Glob("./testdata/benchmark/*.csv")
  54. if err != nil {
  55. b.Fatal(err)
  56. }
  57. b.ResetTimer()
  58. for i := 0; i < b.N; i++ {
  59. if err := run(filenames, "avg", 2, io.Discard); err != nil {
  60. b.Error(err)
  61. }
  62. }
  63. }