1
+ import { describe , it , expect } from "bun:test" ;
2
+ import { fibonacciIterative , fibonacciRecursive } from "./recursion-fibonacci" ;
3
+
4
+ describe ( 'Fibonacci Sequence' , ( ) => {
5
+ // Test cases for both iterative and recursive implementations
6
+ const testCases = [
7
+ { input : 0 , expected : 0 } ,
8
+ { input : 1 , expected : 1 } ,
9
+ { input : 2 , expected : 1 } ,
10
+ { input : 3 , expected : 2 } ,
11
+ { input : 4 , expected : 3 } ,
12
+ { input : 5 , expected : 5 } ,
13
+ { input : 6 , expected : 8 } ,
14
+ { input : 7 , expected : 13 } ,
15
+ { input : 8 , expected : 21 } ,
16
+ ] ;
17
+
18
+ describe ( 'Iterative Fibonacci' , ( ) => {
19
+ it . each ( testCases ) ( 'should return $expected for input $input' , ( { input, expected } ) => {
20
+ expect ( fibonacciIterative ( input ) ) . toBe ( expected ) ;
21
+ } ) ;
22
+
23
+ it ( 'should handle negative input' , ( ) => {
24
+ expect ( fibonacciIterative ( - 1 ) ) . toBe ( - 1 ) ;
25
+ expect ( fibonacciIterative ( - 5 ) ) . toBe ( - 1 ) ;
26
+ } ) ;
27
+ } ) ;
28
+
29
+ describe ( 'Recursive Fibonacci' , ( ) => {
30
+ it . each ( testCases ) ( 'should return $expected for input $input' , ( { input, expected } ) => {
31
+ expect ( fibonacciRecursive ( input ) ) . toBe ( expected ) ;
32
+ } ) ;
33
+
34
+ it ( 'should handle negative input' , ( ) => {
35
+ expect ( fibonacciRecursive ( - 1 ) ) . toBe ( - 1 ) ;
36
+ expect ( fibonacciRecursive ( - 5 ) ) . toBe ( - 1 ) ;
37
+ } ) ;
38
+
39
+ // Note: Be cautious with large inputs due to recursive call overhead
40
+ it ( 'should handle larger inputs' , ( ) => {
41
+ expect ( fibonacciRecursive ( 10 ) ) . toBe ( 55 ) ;
42
+ } ) ;
43
+ } ) ;
44
+
45
+ // Performance and edge case tests
46
+ describe ( 'Performance and Edge Cases' , ( ) => {
47
+ it ( 'iterative should be efficient for larger inputs' , ( ) => {
48
+ const start = performance . now ( ) ;
49
+ const result = fibonacciIterative ( 20 ) ;
50
+ const end = performance . now ( ) ;
51
+
52
+ expect ( result ) . toBe ( 6765 ) ;
53
+ expect ( end - start ) . toBeLessThan ( 1 ) ; // Should complete quickly
54
+ } ) ;
55
+
56
+ it ( 'recursive should handle base cases' , ( ) => {
57
+ expect ( fibonacciRecursive ( 0 ) ) . toBe ( 0 ) ;
58
+ expect ( fibonacciRecursive ( 1 ) ) . toBe ( 1 ) ;
59
+ expect ( fibonacciRecursive ( 2 ) ) . toBe ( 1 ) ;
60
+ } ) ;
61
+ } ) ;
62
+ } ) ;
0 commit comments