From 2ff2d7fe00dbcfd75004a8982e3a67bf9f3cae72 Mon Sep 17 00:00:00 2001 From: "@Oleh_Ottisko" <144347689+OlehOttisko@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:11:05 +0400 Subject: [PATCH 1/3] Create main.go --- cmd/example/main.go | 55 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 cmd/example/main.go diff --git a/cmd/example/main.go b/cmd/example/main.go new file mode 100644 index 0000000..1ce6af6 --- /dev/null +++ b/cmd/example/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "flag" + "fmt" + "io" + "os" + "strings" +) + +func main() { + // Оголошення змінних для параметрів командного рядка + expressionPtr := flag.String("e", "", "Вираз для обчислення") + inputPtr := flag.String("f", "", "Файл з виразом") + outputPtr := flag.String("o", "", "Файл для результату") + + // Розбір параметрів командного рядка + flag.Parse() + + // Створення екземпляра ComputeHandler + var handler ComputeHandler + if *expressionPtr != "" { + handler.Input = strings.NewReader(*expressionPtr) + } else if *inputPtr != "" { + file, err := os.Open(*inputPtr) + if err != nil { + fmt.Fprintf(os.Stderr, "Помилка відкриття файлу: %v\n", err) + os.Exit(1) + } + defer file.Close() + handler.Input = file + } else { + fmt.Fprintln(os.Stderr, "Необхідно вказати вираз або файл з виразом") + os.Exit(1) + } + + if *outputPtr != "" { + file, err := os.Create(*outputPtr) + if err != nil { + fmt.Fprintf(os.Stderr, "Помилка створення файлу: %v\n", err) + os.Exit(1) + } + defer file.Close() + handler.Output = file + } else { + handler.Output = os.Stdout + } + + // Обчислення виразу + err := handler.Compute() + if err != nil { + fmt.Fprintf(os.Stderr, "Помилка обробки виразу: %v\n", err) + os.Exit(1) + } +} From a2769d875aa11de4dab151bd52461fce098f1934 Mon Sep 17 00:00:00 2001 From: "@Oleh_Ottisko" <144347689+OlehOttisko@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:11:38 +0400 Subject: [PATCH 2/3] Create handler.go --- handler.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 handler.go diff --git a/handler.go b/handler.go new file mode 100644 index 0000000..bc88efd --- /dev/null +++ b/handler.go @@ -0,0 +1,16 @@ +package main + +import ( + "io" +) + +// ComputeHandler обробляє обчислення виразу +type ComputeHandler struct { + Input io.Reader + Output io.Writer +} + +// Compute обчислює вираз та записує результат +func (h *ComputeHandler) Compute() error { + // ... (Реалізація обчислення виразу) +} From f92d7dac02af1bd4d8eaa1381ef1feaa46edd7d7 Mon Sep 17 00:00:00 2001 From: "@Oleh_Ottisko" <144347689+OlehOttisko@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:12:21 +0400 Subject: [PATCH 3/3] Create handler_test.go --- handler_test.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 handler_test.go diff --git a/handler_test.go b/handler_test.go new file mode 100644 index 0000000..059f782 --- /dev/null +++ b/handler_test.go @@ -0,0 +1,29 @@ +package main + +import ( + "bytes" + "testing" +) + +func TestComputeHandler(t *testing.T) { + // Тест успішного обчислення + input := bytes.NewBufferString("2 2 +") + output := &bytes.Buffer{} + handler := ComputeHandler{Input: input, Output: output} + err := handler.Compute() + if err != nil { + t.Errorf("Неочікувана помилка: %v", err) + } + if output.String() != "4\n" { + t.Errorf("Невірний результат: %s", output.String()) + } + + // Тест помилки синтаксису + input = bytes.NewBufferString("2 2 + ") + output = &bytes.Buffer{} + handler = ComputeHandler{Input: input, Output: output} + err = handler.Compute() + if err == nil { + t.Error("Очікувалась помилка синтаксису") + } +}