Skip to content

Commit b82fba7

Browse files
Федорец Илья - Лабораторная работа №1 (#414)
* Added new tests for lab1 * initial
1 parent f6de0cd commit b82fba7

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
// Copyright 2024 Fedorets Ilya
2+
3+
#include <gtest/gtest.h>
4+
5+
#include <limits>
6+
7+
#include "include/complex_number.h"
8+
9+
class Fedorets_Ilya_ComplexNumberTest : public ::testing::Test {
10+
protected:
11+
const double eps = std::numeric_limits<double>::epsilon();
12+
};
13+
14+
// Test default constructor
15+
TEST_F(Fedorets_Ilya_ComplexNumberTest, DefaultConstructor) {
16+
ComplexNumber z;
17+
EXPECT_DOUBLE_EQ(z.getRe(), 0.0);
18+
EXPECT_DOUBLE_EQ(z.getIm(), 0.0);
19+
}
20+
21+
// Test parameterized constructor
22+
TEST_F(Fedorets_Ilya_ComplexNumberTest, ParameterizedConstructor) {
23+
ComplexNumber z(3.14, 2.71);
24+
EXPECT_DOUBLE_EQ(z.getRe(), 3.14);
25+
EXPECT_DOUBLE_EQ(z.getIm(), 2.71);
26+
}
27+
28+
// Test copy constructor
29+
TEST_F(Fedorets_Ilya_ComplexNumberTest, CopyConstructor) {
30+
ComplexNumber original(1.23, 4.56);
31+
ComplexNumber copy(original);
32+
EXPECT_DOUBLE_EQ(copy.getRe(), 1.23);
33+
EXPECT_DOUBLE_EQ(copy.getIm(), 4.56);
34+
}
35+
36+
// Test assignment operator
37+
TEST_F(Fedorets_Ilya_ComplexNumberTest, AssignmentOperator) {
38+
ComplexNumber z1(1.0, 2.0);
39+
ComplexNumber z2;
40+
z2 = z1;
41+
EXPECT_DOUBLE_EQ(z2.getRe(), 1.0);
42+
EXPECT_DOUBLE_EQ(z2.getIm(), 2.0);
43+
}
44+
45+
// Test getter and setter methods
46+
TEST_F(Fedorets_Ilya_ComplexNumberTest, GetterSetterMethods) {
47+
ComplexNumber z;
48+
z.setRe(5.0);
49+
z.setIm(-3.0);
50+
EXPECT_DOUBLE_EQ(z.getRe(), 5.0);
51+
EXPECT_DOUBLE_EQ(z.getIm(), -3.0);
52+
}
53+
54+
// Test addition operator
55+
TEST_F(Fedorets_Ilya_ComplexNumberTest, AdditionOperator) {
56+
ComplexNumber z1(1.0, 2.0);
57+
ComplexNumber z2(3.0, 4.0);
58+
ComplexNumber sum = z1 + z2;
59+
EXPECT_DOUBLE_EQ(sum.getRe(), 4.0);
60+
EXPECT_DOUBLE_EQ(sum.getIm(), 6.0);
61+
}
62+
63+
// Test subtraction operator
64+
TEST_F(Fedorets_Ilya_ComplexNumberTest, SubtractionOperator) {
65+
ComplexNumber z1(5.0, 7.0);
66+
ComplexNumber z2(2.0, 3.0);
67+
ComplexNumber diff = z1 - z2;
68+
EXPECT_DOUBLE_EQ(diff.getRe(), 3.0);
69+
EXPECT_DOUBLE_EQ(diff.getIm(), 4.0);
70+
}
71+
72+
// Test multiplication operator
73+
TEST_F(Fedorets_Ilya_ComplexNumberTest, MultiplicationOperator) {
74+
ComplexNumber z1(2.0, 3.0);
75+
ComplexNumber z2(4.0, 5.0);
76+
ComplexNumber mult = z1 * z2;
77+
EXPECT_DOUBLE_EQ(mult.getRe(), -7.0); // (2*4 - 3*5)
78+
EXPECT_DOUBLE_EQ(mult.getIm(), 22.0); // (2*5 + 3*4)
79+
}
80+
81+
// Test division operator
82+
TEST_F(Fedorets_Ilya_ComplexNumberTest, DivisionOperator) {
83+
ComplexNumber z1(1.0, 2.0);
84+
ComplexNumber z2(3.0, 4.0);
85+
ComplexNumber div = z1 / z2;
86+
87+
// Expected values calculated manually
88+
EXPECT_NEAR(div.getRe(), 0.44, eps);
89+
EXPECT_NEAR(div.getIm(), 0.08, eps);
90+
}
91+
92+
// Test division by zero
93+
TEST_F(Fedorets_Ilya_ComplexNumberTest, DivisionByZero) {
94+
ComplexNumber z1(1.0, 2.0);
95+
ComplexNumber z2(0.0, 0.0);
96+
97+
EXPECT_THROW({ z1 / z2; }, std::string);
98+
}
99+
100+
// Test equalsZero method
101+
// TEST_F(Fedorets_Ilya_ComplexNumberTest, EqualsZero) {
102+
// ComplexNumber z1(0.0, 0.0);
103+
// ComplexNumber z2(eps / 2.0, eps / 2.0);
104+
// ComplexNumber z3(eps * 2.0, eps * 2.0);
105+
106+
// EXPECT_TRUE(ComplexNumber::equalsZero(z1));
107+
// EXPECT_TRUE(ComplexNumber::equalsZero(z2));
108+
// EXPECT_FALSE(ComplexNumber::equalsZero(z3));
109+
// }
110+
111+
// Test equality operator
112+
TEST_F(Fedorets_Ilya_ComplexNumberTest, EqualityOperator) {
113+
ComplexNumber z1(1.0, 2.0);
114+
ComplexNumber z2(1.0, 2.0);
115+
ComplexNumber z3(1.1, 2.0);
116+
117+
EXPECT_TRUE(z1 == z2);
118+
EXPECT_FALSE(z1 == z3);
119+
}
120+
121+
// Test inequality operator
122+
TEST_F(Fedorets_Ilya_ComplexNumberTest, InequalityOperator) {
123+
ComplexNumber z1(1.0, 2.0);
124+
ComplexNumber z2(1.1, 2.0);
125+
126+
EXPECT_TRUE(z1 != z2);
127+
}
128+
129+
// Test edge cases
130+
TEST_F(Fedorets_Ilya_ComplexNumberTest, EdgeCases) {
131+
// Very small numbers
132+
ComplexNumber z1(1e-300, 1e-300);
133+
ComplexNumber z2(1e-300, 1e-300);
134+
EXPECT_TRUE(z1 == z2);
135+
136+
// Very large numbers
137+
ComplexNumber z3(1e300, 1e300);
138+
ComplexNumber z4(1e300, 1e300);
139+
EXPECT_TRUE(z3 == z4);
140+
}
141+
142+
// Test complex arithmetic properties
143+
TEST_F(Fedorets_Ilya_ComplexNumberTest, ArithmeticProperties) {
144+
ComplexNumber z1(3.0, 4.0);
145+
ComplexNumber z2(1.0, 2.0);
146+
ComplexNumber z3(2.0, 3.0);
147+
148+
// Associative property of addition
149+
ComplexNumber sum1 = (z1 + z2) + z3;
150+
ComplexNumber sum2 = z1 + (z2 + z3);
151+
EXPECT_TRUE(sum1 == sum2);
152+
153+
// Distributive property
154+
ComplexNumber dist1 = z1 * (z2 + z3);
155+
ComplexNumber dist2 = z1 * z2 + z1 * z3;
156+
EXPECT_TRUE(dist1 == dist2);
157+
}
158+
159+
// Test complex number with zero
160+
TEST_F(Fedorets_Ilya_ComplexNumberTest, ZeroOperations) {
161+
ComplexNumber z1(1.0, 2.0);
162+
ComplexNumber zero(0.0, 0.0);
163+
164+
// Addition with zero
165+
EXPECT_TRUE(z1 + zero == z1);
166+
167+
// Subtraction with zero
168+
EXPECT_TRUE(z1 - zero == z1);
169+
170+
// Multiplication with zero
171+
EXPECT_TRUE(z1 * zero == zero);
172+
}

0 commit comments

Comments
 (0)