Skip to content

Commit 175f8b5

Browse files
committed
1-get-angle-type.test.js committed
1 parent 63fc5f0 commit 175f8b5

File tree

1 file changed

+171
-0
lines changed

1 file changed

+171
-0
lines changed

Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/1-get-angle-type.test.js

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
/**
2+
* Original file
3+
*
14
// This statement loads the getAngleType function you wrote in the implement directory.
25
// We will use the same function, but write tests for it using Jest in this file.
6+
*/
37
const getAngleType = require("../implement/1-get-angle-type");
48

9+
/**
510
// TODO: Write tests in Jest syntax to cover all cases/outcomes,
611
// including boundary and invalid cases.
712
@@ -18,3 +23,169 @@ test(`should return "Acute angle" when (0 < angle < 90)`, () => {
1823
// Case 4: Straight angle
1924
// Case 5: Reflex angles
2025
// Case 6: Invalid angles
26+
*
27+
28+
// Implement a function getAngleType
29+
//
30+
// When given an angle in degrees, it should return a string indicating the type of angle:
31+
// - "Acute angle" for angles greater than 0° and less than 90°
32+
// - "Right angle" for exactly 90°
33+
// - "Obtuse angle" for angles greater than 90° and less than 180°
34+
// - "Straight angle" for exactly 180°
35+
// - "Reflex angle" for angles greater than 180° and less than 360°
36+
// - "Invalid angle" for angles outside the valid range.
37+
38+
// Assumption: The parameter is a valid number. (You do not need to handle non-numeric inputs.)
39+
40+
function getAngleType(angle) {
41+
// Check for invalid angles first (angles ≤ 0 or ≥ 360)
42+
if (angle <= 0 || angle >= 360) {
43+
return "Invalid angle";
44+
}
45+
46+
// Check for specific angle types
47+
if (angle < 90) {
48+
return "Acute angle";
49+
} else if (angle === 90) {
50+
return "Right angle";
51+
} else if (angle < 180) {
52+
return "Obtuse angle";
53+
} else if (angle === 180) {
54+
return "Straight angle";
55+
} else { // angle > 180 and < 360 (already validated above)
56+
return "Reflex angle";
57+
}
58+
}
59+
60+
// The line below allows us to load the getAngleType function into tests in other files.
61+
// This will be useful in the "rewrite tests with jest" step.
62+
module.exports = getAngleType;
63+
64+
// This helper function is written to make our assertions easier to read.
65+
// If the actual output matches the target output, the test will pass
66+
function assertEquals(actualOutput, targetOutput) {
67+
console.assert(
68+
actualOutput === targetOutput,
69+
`Expected ${actualOutput} to equal ${targetOutput}`
70+
);
71+
}
72+
*
73+
*
74+
// TODO: Write tests to cover all cases, including boundary and invalid cases.
75+
*
76+
* End of original file
77+
*/
78+
79+
// This helper function is written to make our assertions easier to read.
80+
// If the actual output matches the target output, the test will pass
81+
function assertEquals(actualOutput, targetOutput) {
82+
console.assert(
83+
actualOutput === targetOutput,
84+
`Expected ${actualOutput} to equal ${targetOutput}`
85+
);
86+
}
87+
88+
console.log("Running getAngleType tests...\n");
89+
90+
// Test Case 1: Acute angles (greater than 0° and less than 90°)
91+
console.log("Testing Acute angles:");
92+
assertEquals(getAngleType(1), "Acute angle");
93+
assertEquals(getAngleType(45), "Acute angle");
94+
assertEquals(getAngleType(89), "Acute angle");
95+
assertEquals(getAngleType(89.9), "Acute angle");
96+
97+
// Test Case 2: Right angle (exactly 90°)
98+
console.log("\nTesting Right angle:");
99+
assertEquals(getAngleType(90), "Right angle");
100+
assertEquals(getAngleType(90.0), "Right angle");
101+
102+
// Test Case 3: Obtuse angles (greater than 90° and less than 180°)
103+
console.log("\nTesting Obtuse angles:");
104+
assertEquals(getAngleType(91), "Obtuse angle");
105+
assertEquals(getAngleType(135), "Obtuse angle");
106+
assertEquals(getAngleType(179), "Obtuse angle");
107+
assertEquals(getAngleType(179.9), "Obtuse angle");
108+
109+
// Test Case 4: Straight angle (exactly 180°)
110+
console.log("\nTesting Straight angle:");
111+
assertEquals(getAngleType(180), "Straight angle");
112+
assertEquals(getAngleType(180.0), "Straight angle");
113+
114+
// Test Case 5: Reflex angles (greater than 180° and less than 360°)
115+
console.log("\nTesting Reflex angles:");
116+
assertEquals(getAngleType(181), "Reflex angle");
117+
assertEquals(getAngleType(270), "Reflex angle");
118+
assertEquals(getAngleType(359), "Reflex angle");
119+
assertEquals(getAngleType(359.9), "Reflex angle");
120+
121+
// Test Case 6: Invalid angles (≤ 0° or ≥ 360°)
122+
console.log("\nTesting Invalid angles:");
123+
// Zero and negative angles
124+
assertEquals(getAngleType(0), "Invalid angle");
125+
assertEquals(getAngleType(-1), "Invalid angle");
126+
assertEquals(getAngleType(-45), "Invalid angle");
127+
assertEquals(getAngleType(-90), "Invalid angle");
128+
assertEquals(getAngleType(-180), "Invalid angle");
129+
assertEquals(getAngleType(-360), "Invalid angle");
130+
131+
// Angles ≥ 360
132+
assertEquals(getAngleType(360), "Invalid angle");
133+
assertEquals(getAngleType(361), "Invalid angle");
134+
assertEquals(getAngleType(400), "Invalid angle");
135+
assertEquals(getAngleType(720), "Invalid angle");
136+
137+
console.log("\nAll tests completed!");
138+
139+
140+
// getAngleType.test.js
141+
// const getAngleType = require('./path-to-your-file');
142+
143+
describe('getAngleType', () => {
144+
test('should return "Acute angle" for angles between 0 and 90 exclusive', () => {
145+
expect(getAngleType(1)).toBe("Acute angle");
146+
expect(getAngleType(45)).toBe("Acute angle");
147+
expect(getAngleType(89)).toBe("Acute angle");
148+
expect(getAngleType(89.9)).toBe("Acute angle");
149+
});
150+
151+
test('should return "Right angle" for exactly 90 degrees', () => {
152+
expect(getAngleType(90)).toBe("Right angle");
153+
expect(getAngleType(90.0)).toBe("Right angle");
154+
});
155+
156+
test('should return "Obtuse angle" for angles between 90 and 180 exclusive', () => {
157+
expect(getAngleType(91)).toBe("Obtuse angle");
158+
expect(getAngleType(135)).toBe("Obtuse angle");
159+
expect(getAngleType(179)).toBe("Obtuse angle");
160+
expect(getAngleType(179.9)).toBe("Obtuse angle");
161+
});
162+
163+
test('should return "Straight angle" for exactly 180 degrees', () => {
164+
expect(getAngleType(180)).toBe("Straight angle");
165+
expect(getAngleType(180.0)).toBe("Straight angle");
166+
});
167+
168+
test('should return "Reflex angle" for angles between 180 and 360 exclusive', () => {
169+
expect(getAngleType(181)).toBe("Reflex angle");
170+
expect(getAngleType(270)).toBe("Reflex angle");
171+
expect(getAngleType(359)).toBe("Reflex angle");
172+
expect(getAngleType(359.9)).toBe("Reflex angle");
173+
});
174+
175+
test('should return "Invalid angle" for angles ≤ 0 or ≥ 360', () => {
176+
// Zero and negative angles
177+
expect(getAngleType(0)).toBe("Invalid angle");
178+
expect(getAngleType(-1)).toBe("Invalid angle");
179+
expect(getAngleType(-45)).toBe("Invalid angle");
180+
expect(getAngleType(-90)).toBe("Invalid angle");
181+
expect(getAngleType(-180)).toBe("Invalid angle");
182+
expect(getAngleType(-360)).toBe("Invalid angle");
183+
184+
// Angles ≥ 360
185+
expect(getAngleType(360)).toBe("Invalid angle");
186+
expect(getAngleType(361)).toBe("Invalid angle");
187+
expect(getAngleType(400)).toBe("Invalid angle");
188+
expect(getAngleType(720)).toBe("Invalid angle");
189+
});
190+
});
191+

0 commit comments

Comments
 (0)