@@ -3,3 +3,66 @@ const assert = require('assert');
3
3
const { Calculator } = require ( './main' ) ;
4
4
5
5
// TODO: write your tests here
6
+ describe ( 'Calculate' , ( t ) => {
7
+ const calculator = new Calculator ( ) ;
8
+
9
+ it ( 'test exp() functionality' , ( ) => {
10
+ const testcases = [
11
+ { param : Infinity , expected : Error , msg : 'unsupported operand type' } ,
12
+ { param : - Infinity , expected : Error , msg : 'unsupported operand type' } ,
13
+ { param : NaN , expected : Error , msg : 'unsupported operand type' } ,
14
+ { param : 'abc' , expected : Error , msg : 'unsupported operand type' } ,
15
+ { param : true , expected : Error , msg : 'unsupported operand type' } ,
16
+ { param : null , expected : Error , msg : 'unsupported operand type' } ,
17
+ { param : undefined , expected : Error , msg : 'unsupported operand type' } ,
18
+ { param : { } , expected : Error , msg : 'unsupported operand type' } ,
19
+
20
+ { param : Number . MAX_VALUE , expected : Error , msg : 'overflow' } ,
21
+
22
+ { param : 42 , expected : Math . exp ( 42 ) } ,
23
+ { param : 3.14 , expected : Math . exp ( 3.14 ) } ,
24
+ { param : 0 , expected : Math . exp ( 0 ) }
25
+ ] ;
26
+ for ( const tc of testcases ) {
27
+ if ( tc . expected === Error ) {
28
+ assert . throws ( ( ) => {
29
+ calculator . exp ( tc . param ) ;
30
+ } ,
31
+ {
32
+ name : 'Error' ,
33
+ message : tc . msg
34
+ } ) ;
35
+ } else {
36
+ assert . strictEqual ( calculator . exp ( tc . param ) , tc . expected ) ;
37
+ }
38
+ }
39
+ } ) ;
40
+ it ( 'test log() functionality' , ( ) => {
41
+ const testcases = [
42
+ { param : Infinity , expected : Error , msg : 'unsupported operand type' } ,
43
+ { param : - Infinity , expected : Error , msg : 'unsupported operand type' } ,
44
+ { param : true , expected : Error , msg : 'unsupported operand type' } ,
45
+ { param : 'abc' , expected : Error , msg : 'unsupported operand type' } ,
46
+
47
+ { param : 0 , expected : Error , msg : "math domain error (1)" } ,
48
+ { param : - 1 , expected : Error , msg : 'math domain error (2)' } ,
49
+
50
+ { param : 42 , expected : Math . log ( 42 ) } ,
51
+ { param : 3.14 , expected : Math . log ( 3.14 ) } ,
52
+ ] ;
53
+
54
+ for ( const tc of testcases ) {
55
+ if ( tc . expected === Error ) {
56
+ assert . throws ( ( ) => {
57
+ calculator . log ( tc . param ) ;
58
+ } , {
59
+ name : 'Error' ,
60
+ message : tc . msg
61
+ } ) ;
62
+ } else {
63
+ assert . strictEqual ( calculator . log ( tc . param ) , tc . expected ) ;
64
+ }
65
+ }
66
+ } ) ;
67
+
68
+ } ) ;
0 commit comments