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+ */
37const 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