From ba989b122ab0c89a2cef1d994481f7106521d3ef Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 15:41:34 +0300 Subject: [PATCH 01/17] iter1 --- equasion/solution.go | 16 ++++++++++++++ equasion/solve_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 equasion/solution.go create mode 100644 equasion/solve_test.go diff --git a/equasion/solution.go b/equasion/solution.go new file mode 100644 index 0000000..b2f4d1b --- /dev/null +++ b/equasion/solution.go @@ -0,0 +1,16 @@ +package main +import "errors" +func solve(a float64,b float64,c float64) ([]float64, error){ + result := make([]float64, 0, 3) + if a == 0 { + return result, errors.New("this is an error") + } + d := b * b - 4 * a * c + if d == 0 { + result = append(result, ((-1)* b) / (2 * a)) + } else if d > 0 { + result = append(result, ((-1) * b - d) / (2 * a)) + result = append(result, ((-1) * b + d) / (2 * a)) + } + return result, nil +} \ No newline at end of file diff --git a/equasion/solve_test.go b/equasion/solve_test.go new file mode 100644 index 0000000..f171508 --- /dev/null +++ b/equasion/solve_test.go @@ -0,0 +1,48 @@ +package main + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestSolveTwo(t *testing.T) { + A := 1 + B := 0 + C := -1 + expected := []float64 {1, -1} + actual, err := solve(A, B, C) + + assert.Nil(t, err) + assert.Equal(t, expected, actual) +} +func TestSolveZero(t *testing.T) { + A := 1 + B := 0 + C := 1 + expected := make([]float64, 0) + actual, err := solve(A, B, C) + + assert.Nil(t, err) + assert.Equal(t, expected, actual) +} + +func TestSolveOne(t *testing.T) { + A := 1 + B := 2 + C := 1 + expected := [1]float64 {1} + actual, err := solve(A, B, C) + + assert.Nil(t, err) + assert.Equal(t, expected, actual) +} + +func TestSolveA(t *testing.T) { + A := 0 + B := 1 + C := 1 + + actual, err := solve(A, B, C) + + assert.NilError(t, err) +} From fa6bb8e95020a48282c9916adc089de166b0b3f9 Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 15:44:52 +0300 Subject: [PATCH 02/17] update --- equasion/solution.go | 2 +- equasion/solve_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/equasion/solution.go b/equasion/solution.go index b2f4d1b..88ecc66 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -1,4 +1,4 @@ -package main +package Solve import "errors" func solve(a float64,b float64,c float64) ([]float64, error){ result := make([]float64, 0, 3) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index f171508..ef85228 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -1,4 +1,4 @@ -package main +package Solve import ( "github.com/stretchr/testify/assert" From cbaf548568c7bbb74217d6ec40e65550be9b0ed5 Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 15:48:38 +0300 Subject: [PATCH 03/17] update solve_test.go --- equasion/solve_test.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index ef85228..7bbb19d 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -6,9 +6,9 @@ import ( ) func TestSolveTwo(t *testing.T) { - A := 1 - B := 0 - C := -1 + var A float64 = 1 + var B float64 = 0 + var C float64 = -1 expected := []float64 {1, -1} actual, err := solve(A, B, C) @@ -16,9 +16,9 @@ func TestSolveTwo(t *testing.T) { assert.Equal(t, expected, actual) } func TestSolveZero(t *testing.T) { - A := 1 - B := 0 - C := 1 + var A float64 = 1 + var B float64 = 0 + var C float64 = 1 expected := make([]float64, 0) actual, err := solve(A, B, C) @@ -27,9 +27,9 @@ func TestSolveZero(t *testing.T) { } func TestSolveOne(t *testing.T) { - A := 1 - B := 2 - C := 1 + var A float64 = 1 + var B float64 = 2 + var C float64= 1 expected := [1]float64 {1} actual, err := solve(A, B, C) @@ -38,9 +38,9 @@ func TestSolveOne(t *testing.T) { } func TestSolveA(t *testing.T) { - A := 0 - B := 1 - C := 1 + var A float64 = 0 + var B float64 = 1 + var C float64 = 1 actual, err := solve(A, B, C) From f31b8fb4e5d325a5dc07afa848abf29fa68e837d Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 15:51:34 +0300 Subject: [PATCH 04/17] update solve_test.go --- equasion/solve_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index 7bbb19d..ff1baed 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -42,7 +42,7 @@ func TestSolveA(t *testing.T) { var B float64 = 1 var C float64 = 1 - actual, err := solve(A, B, C) + _, err := solve(A, B, C) - assert.NilError(t, err) + assert.NotNil(t, err) } From 2a3c5651f53e7a7710005dba3ced83ecbd353805 Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 15:58:31 +0300 Subject: [PATCH 05/17] update solve_test.go --- equasion/solve_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index ff1baed..5748080 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -30,7 +30,7 @@ func TestSolveOne(t *testing.T) { var A float64 = 1 var B float64 = 2 var C float64= 1 - expected := [1]float64 {1} + expected := []float64 {-1} actual, err := solve(A, B, C) assert.Nil(t, err) From 34952b2088555ae14bddbecb609cbf8e1ec90a65 Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 16:03:11 +0300 Subject: [PATCH 06/17] update solution.go --- equasion/solution.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/equasion/solution.go b/equasion/solution.go index 88ecc66..fe248c5 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -1,5 +1,9 @@ package Solve -import "errors" +import ( + "errors" + "math" + ) + func solve(a float64,b float64,c float64) ([]float64, error){ result := make([]float64, 0, 3) if a == 0 { @@ -9,8 +13,8 @@ func solve(a float64,b float64,c float64) ([]float64, error){ if d == 0 { result = append(result, ((-1)* b) / (2 * a)) } else if d > 0 { - result = append(result, ((-1) * b - d) / (2 * a)) - result = append(result, ((-1) * b + d) / (2 * a)) + result = append(result, ((-1) * b - math.Sqrt(d)) / (2 * a)) + result = append(result, ((-1) * b + math.Sqrt(d)) / (2 * a)) } return result, nil } \ No newline at end of file From d23471ff442bbff551e255a462678dc455ee697d Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:08:38 +0300 Subject: [PATCH 07/17] update --- equasion/solution.go | 17 ++++++++++++----- equasion/solve_test.go | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/equasion/solution.go b/equasion/solution.go index fe248c5..b4cb737 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -6,15 +6,22 @@ import ( func solve(a float64,b float64,c float64) ([]float64, error){ result := make([]float64, 0, 3) - if a == 0 { - return result, errors.New("this is an error") + epsilon := 1e-9 + if math.IsNaN(A) || math.IsNaN(B) || math.IsNaN(C) { + return result, errors.New("One of parameters is NaN") + } + if math.IsInf(A) || math.IsInf(B) || math.IsInf(C) { + return result, errors.New("One of paramets is Inf") + } + if math.Abs(a) < epsilon { + return result, errors.New("a == 0") } d := b * b - 4 * a * c - if d == 0 { + if math.Abs(d) < epsilon { result = append(result, ((-1)* b) / (2 * a)) - } else if d > 0 { + } else if !math.IsNaN(math.Sqrt(d)) { result = append(result, ((-1) * b - math.Sqrt(d)) / (2 * a)) - result = append(result, ((-1) * b + math.Sqrt(d)) / (2 * a)) + result = append(result, ((-1) * b + math.Sqrt(d)) / (2 * a)) } return result, nil } \ No newline at end of file diff --git a/equasion/solve_test.go b/equasion/solve_test.go index 5748080..ded191b 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -37,7 +37,7 @@ func TestSolveOne(t *testing.T) { assert.Equal(t, expected, actual) } -func TestSolveA(t *testing.T) { +func TestSolveAZero(t *testing.T) { var A float64 = 0 var B float64 = 1 var C float64 = 1 @@ -46,3 +46,41 @@ func TestSolveA(t *testing.T) { assert.NotNil(t, err) } +func TestSolveAEps(t *testing.T) { + var A float64 = 1e-10 + var B float64 = 1 + var C float64 = 1 + + _, err := solve(A, B, C) + + assert.NotNil(t, err) +} +func TestSolveDEps(t *testing.T) { + var A float64 = 1e-5 + var B float64 = -2.5 * 1e-5 + var C float64= 1e-5 + expected := []float64 {1.9999999999999996, 0.5000000000000001} + actual, err := solve(A, B, C) + + assert.Nil(t, err) + assert.Equal(t, expected, actual) +} + +func TestSolveNan(t *testing.T) { + A := math.NaN() + B := math.NaN() + C := math.NaN() + + _, err := solve(A, B, C) + + assert.NotNil(t, err) +} +func TestSolveInf(t *testing.T) { + A := math.Inf() + B := math.Inf() + C := math.Inf() + + _, err := solve(A, B, C) + + assert.NotNil(t, err) +} From eb452997fdf22a64939b74a808e38647f8017da7 Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:09:53 +0300 Subject: [PATCH 08/17] update solution.go --- equasion/solution.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/equasion/solution.go b/equasion/solution.go index b4cb737..bba43b6 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -20,8 +20,8 @@ func solve(a float64,b float64,c float64) ([]float64, error){ if math.Abs(d) < epsilon { result = append(result, ((-1)* b) / (2 * a)) } else if !math.IsNaN(math.Sqrt(d)) { - result = append(result, ((-1) * b - math.Sqrt(d)) / (2 * a)) result = append(result, ((-1) * b + math.Sqrt(d)) / (2 * a)) + result = append(result, ((-1) * b - math.Sqrt(d)) / (2 * a)) } return result, nil } \ No newline at end of file From 6cd5d5c5bf7b07db15739d63be2d55ddda8dff2c Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:12:07 +0300 Subject: [PATCH 09/17] update solution.go --- equasion/solution.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/equasion/solution.go b/equasion/solution.go index bba43b6..e6d1e60 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -7,10 +7,10 @@ import ( func solve(a float64,b float64,c float64) ([]float64, error){ result := make([]float64, 0, 3) epsilon := 1e-9 - if math.IsNaN(A) || math.IsNaN(B) || math.IsNaN(C) { + if math.IsNaN(a) || math.IsNaN(b) || math.IsNaN(c) { return result, errors.New("One of parameters is NaN") } - if math.IsInf(A) || math.IsInf(B) || math.IsInf(C) { + if math.IsInf(a) || math.IsInf(b) || math.IsInf(c) { return result, errors.New("One of paramets is Inf") } if math.Abs(a) < epsilon { From 9d978eb136840b87e66967ce9699c3c60a67e7ac Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:15:13 +0300 Subject: [PATCH 10/17] update solution.go --- equasion/solution.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/equasion/solution.go b/equasion/solution.go index e6d1e60..72db467 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -10,7 +10,7 @@ func solve(a float64,b float64,c float64) ([]float64, error){ if math.IsNaN(a) || math.IsNaN(b) || math.IsNaN(c) { return result, errors.New("One of parameters is NaN") } - if math.IsInf(a) || math.IsInf(b) || math.IsInf(c) { + if math.IsInf(a, 0) || math.IsInf(b, 0) || math.IsInf(c, 0) { return result, errors.New("One of paramets is Inf") } if math.Abs(a) < epsilon { From 33a4bbfab6341635eaeeadbc3b70f5641610921c Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:16:30 +0300 Subject: [PATCH 11/17] update solve_test.go --- equasion/solve_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index ded191b..9309715 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -3,6 +3,7 @@ package Solve import ( "github.com/stretchr/testify/assert" "testing" + "math" ) func TestSolveTwo(t *testing.T) { From bb6e44d1e443f534b8954c0212a0c93fc402dd2e Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:18:38 +0300 Subject: [PATCH 12/17] update solve_test.go --- equasion/solve_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index 9309715..77c80ca 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -77,9 +77,9 @@ func TestSolveNan(t *testing.T) { assert.NotNil(t, err) } func TestSolveInf(t *testing.T) { - A := math.Inf() - B := math.Inf() - C := math.Inf() + A := math.Inf(0) + B := math.Inf(0) + C := math.Inf(0) _, err := solve(A, B, C) From a672e762df9fe6998ee782484037d00e61913bde Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:21:08 +0300 Subject: [PATCH 13/17] update solution.go --- equasion/solution.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/equasion/solution.go b/equasion/solution.go index 72db467..dfa04f8 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -6,7 +6,7 @@ import ( func solve(a float64,b float64,c float64) ([]float64, error){ result := make([]float64, 0, 3) - epsilon := 1e-9 + epsilon := math.Nextafter(1.0,2.0)-1.0 if math.IsNaN(a) || math.IsNaN(b) || math.IsNaN(c) { return result, errors.New("One of parameters is NaN") } From 87b3c104bc8edca1923f8309d55e293b79d78a8e Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:23:52 +0300 Subject: [PATCH 14/17] update solution.go --- equasion/solution.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/equasion/solution.go b/equasion/solution.go index dfa04f8..2ef53d0 100644 --- a/equasion/solution.go +++ b/equasion/solution.go @@ -6,7 +6,7 @@ import ( func solve(a float64,b float64,c float64) ([]float64, error){ result := make([]float64, 0, 3) - epsilon := math.Nextafter(1.0,2.0)-1.0 + epsilon := float64(7.)/3 - float64(4.)/3 - float64(1.) if math.IsNaN(a) || math.IsNaN(b) || math.IsNaN(c) { return result, errors.New("One of parameters is NaN") } From 1772c8bc70be399b70c2082a4f2491448d5738f5 Mon Sep 17 00:00:00 2001 From: ermilova Date: Thu, 24 Apr 2025 18:26:07 +0300 Subject: [PATCH 15/17] update solve_test.go --- equasion/solve_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/equasion/solve_test.go b/equasion/solve_test.go index 77c80ca..e538f9e 100644 --- a/equasion/solve_test.go +++ b/equasion/solve_test.go @@ -54,7 +54,7 @@ func TestSolveAEps(t *testing.T) { _, err := solve(A, B, C) - assert.NotNil(t, err) + assert.Nil(t, err) } func TestSolveDEps(t *testing.T) { var A float64 = 1e-5 From 84a429dc8307e33f2833cb2f155f08c5099e84d9 Mon Sep 17 00:00:00 2001 From: ermilova Date: Mon, 27 Oct 2025 18:42:14 +0300 Subject: [PATCH 16/17] ADD readme --- README.md | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 625d3ab..09bf2e8 100644 --- a/README.md +++ b/README.md @@ -1 +1,66 @@ -# module_test \ No newline at end of file +Разработать набор модульных тестов + +Цель: +Научиться писать модульные тесты по TDD, так как модульные тесты является важной частью концепции Time To Market и часто применяется в современных проектах. + + +Описание/Пошаговая инструкция выполнения домашнего задания: +Создать проект на gitlab/github. +Настроить CI, чтобы можно было собирать проект и прогонять тесты. +Необходимо реализовать операцию нахождения квадратного уравнения. Предположим, что эта операция описывается следующей функцией c поправкой на конкретный язык программирования. В ООП языках эта функция реализуется в виде метода класса. + +solve(double a, double b, double c): double[] + +здесь a, b, c - коэффициенты квадратного уравнения, функция возвращает список корней квадратного уравнения. + +Написать тест, который проверяет, что для уравнения x^2+1 = 0 корней нет (возвращается пустой массив) + +Написать минимальную реализацию функции solve, которая удовлетворяет данному тесту. + +Написать тест, который проверяет, что для уравнения x^2-1 = 0 есть два корня кратности 1 (x1=1, x2=-1) + +Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.5. + +Написать тест, который проверяет, что для уравнения x^2+2x+1 = 0 есть один корень кратности 2 (x1= x2 = -1). + +Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.7. + +Написать тест, который проверяет, что коэффициент a не может быть равен 0. В этом случае solve выбрасывает исключение. +Примечание. Учесть, что a имеет тип double и сравнивать с 0 через == нельзя. + +Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.9. + +С учетом того, что дискриминант тоже нельзя сравнивать с 0 через знак равенства, подобрать такие коэффициенты квадратного уравнения для случая одного корня кратности два, чтобы дискриминант был отличный от нуля, но меньше заданного эпсилон. Эти коэффициенты должны заменить коэффициенты в тесте из п. 7. + +При необходимости поправить реализацию квадратного уравнения. + +Посмотреть какие еще значения могут принимать числа типа double, кроме числовых и написать тест с их использованием на все коэффициенты. solve должен выбрасывать исключение. + +Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.13. + +Сделать merge request/pull request и ссылку на него указать при сдаче ДЗ. + + +Критерии оценки: +ДЗ сдана на проверку. 1 балл +Настроен CI. 1 балл. +Тест, который проверяет, что для уравнения x^2+1 = 0 корней нет, успешно выполняется. 1 балл. +Тест, который проверяет, что для уравнения x^2-1 = 0 есть два корня кратности 1, успешно выполняется. 1 балл. +Тест, который проверяет, что для уравнения есть один корень кратности 2, успешно выполняется. +1 балл, если дискриминант ровно равен 0, +2 балла, если дискриминант не ноль, но меньше заданного epsilon. +Тест, который проверяет, что коэффициент a не может быть равен 0, с учетом, что a - число с плавающей точкой, успешно выполняется. 1 балл. +Тест, который проверяет, что solve не может принимать значения, отличные от чиcел, успешно выполняется. +1 балл, если хотя бы один случай рассмотрен, +2 балла - учтены все случаи. +Оформлен merge/pull request. 1 балл +Итого: 10 баллов. +Задание будет принято, если набрано не менее 8 баллов. + + +Компетенции: +Современные подходы к разработке +- писать модульные тесты с помощью Mock-объектов +- применять TDD +Рекомендуем сдать до: +Статус: принято (10 баллов \ No newline at end of file From bb82c755b1c48d14c930b2713c481968120314aa Mon Sep 17 00:00:00 2001 From: ermilova Date: Mon, 27 Oct 2025 18:44:01 +0300 Subject: [PATCH 17/17] ADD readme --- README.md | 77 +++++++++++++++---------------------------------------- 1 file changed, 20 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 09bf2e8..7dbc831 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,29 @@ Разработать набор модульных тестов +### Цель: -Цель: Научиться писать модульные тесты по TDD, так как модульные тесты является важной частью концепции Time To Market и часто применяется в современных проектах. +### Описание +1. Создать проект на gitlab/github. -Описание/Пошаговая инструкция выполнения домашнего задания: -Создать проект на gitlab/github. -Настроить CI, чтобы можно было собирать проект и прогонять тесты. -Необходимо реализовать операцию нахождения квадратного уравнения. Предположим, что эта операция описывается следующей функцией c поправкой на конкретный язык программирования. В ООП языках эта функция реализуется в виде метода класса. +2. Настроить CI, чтобы можно было собирать проект и прогонять тесты. +Необходимо реализовать операцию нахождения квадратного уравнения. Предположим, что эта операция описывается следующей функцией c поправкой на конкретный язык программирования. В ООП языках эта функция реализуется в виде метода класса. +``` solve(double a, double b, double c): double[] - +``` здесь a, b, c - коэффициенты квадратного уравнения, функция возвращает список корней квадратного уравнения. -Написать тест, который проверяет, что для уравнения x^2+1 = 0 корней нет (возвращается пустой массив) - -Написать минимальную реализацию функции solve, которая удовлетворяет данному тесту. - -Написать тест, который проверяет, что для уравнения x^2-1 = 0 есть два корня кратности 1 (x1=1, x2=-1) - -Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.5. - -Написать тест, который проверяет, что для уравнения x^2+2x+1 = 0 есть один корень кратности 2 (x1= x2 = -1). - -Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.7. - -Написать тест, который проверяет, что коэффициент a не может быть равен 0. В этом случае solve выбрасывает исключение. -Примечание. Учесть, что a имеет тип double и сравнивать с 0 через == нельзя. - -Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.9. - -С учетом того, что дискриминант тоже нельзя сравнивать с 0 через знак равенства, подобрать такие коэффициенты квадратного уравнения для случая одного корня кратности два, чтобы дискриминант был отличный от нуля, но меньше заданного эпсилон. Эти коэффициенты должны заменить коэффициенты в тесте из п. 7. - -При необходимости поправить реализацию квадратного уравнения. - -Посмотреть какие еще значения могут принимать числа типа double, кроме числовых и написать тест с их использованием на все коэффициенты. solve должен выбрасывать исключение. - -Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.13. - -Сделать merge request/pull request и ссылку на него указать при сдаче ДЗ. - - -Критерии оценки: -ДЗ сдана на проверку. 1 балл -Настроен CI. 1 балл. -Тест, который проверяет, что для уравнения x^2+1 = 0 корней нет, успешно выполняется. 1 балл. -Тест, который проверяет, что для уравнения x^2-1 = 0 есть два корня кратности 1, успешно выполняется. 1 балл. -Тест, который проверяет, что для уравнения есть один корень кратности 2, успешно выполняется. -1 балл, если дискриминант ровно равен 0, -2 балла, если дискриминант не ноль, но меньше заданного epsilon. -Тест, который проверяет, что коэффициент a не может быть равен 0, с учетом, что a - число с плавающей точкой, успешно выполняется. 1 балл. -Тест, который проверяет, что solve не может принимать значения, отличные от чиcел, успешно выполняется. -1 балл, если хотя бы один случай рассмотрен, -2 балла - учтены все случаи. -Оформлен merge/pull request. 1 балл -Итого: 10 баллов. -Задание будет принято, если набрано не менее 8 баллов. - - -Компетенции: -Современные подходы к разработке -- писать модульные тесты с помощью Mock-объектов -- применять TDD -Рекомендуем сдать до: -Статус: принято (10 баллов \ No newline at end of file +3. Написать тест, который проверяет, что для уравнения x^2+1 = 0 корней нет (возвращается пустой массив) +4. Написать минимальную реализацию функции solve, которая удовлетворяет данному тесту. +5. Написать тест, который проверяет, что для уравнения x^2-1 = 0 есть два корня кратности 1 (x1=1, x2=-1) +6. Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.5. +7. Написать тест, который проверяет, что для уравнения x^2+2x+1 = 0 есть один корень кратности 2 (x1= x2 = -1). +8. Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.7. +9. Написать тест, который проверяет, что коэффициент a не может быть равен 0. В этом случае solve выбрасывает исключение. **Примечание**. Учесть, что a имеет тип double и сравнивать с 0 через == нельзя. +10. Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.9. +11. С учетом того, что дискриминант тоже нельзя сравнивать с 0 через знак равенства, подобрать такие коэффициенты квадратного уравнения для случая одного корня кратности два, чтобы дискриминант был отличный от нуля, но меньше заданного эпсилон. Эти коэффициенты должны заменить коэффициенты в тесте из п. 7. +12. При необходимости поправить реализацию квадратного уравнения. +13. Посмотреть какие еще значения могут принимать числа типа double, кроме числовых и написать тест с их использованием на все коэффициенты. solve должен выбрасывать исключение. +14. Написать минимальную реализацию функции solve, которая удовлетворяет тесту из п.13. +15. Сделать merge request/pull request и ссылку на него указать при сдаче ДЗ. \ No newline at end of file