4.1. **Minimalistic function**: Functional programmers sometimes tend to write code in a minimalistic way. Can you examine this version of the Fibonacci function, and explain whether it works, and if so, how?

const fib2 = n => (n < 2 ? n : fib2(n - 2) + fib2(n - 1));

4.2. **A cheap way**:** **The following version of the Fibonacci function is quite efficient and doesn't do any unnecessary or repeated computations. Can you see how? Suggestion: try to calculate `fib4(6)`

by hand, and compare with the example given earlier in the book:

const fib4 = (n, a = 0, b = 1) => (n === 0 ? a : fib4(n - 1, b, a + b));

4.3 **A shuffle test:** How would you write unit tests for `shuffle()`

, to test whether it works correctly with arrays with *repeated* values?

4.4. **Breaking laws:** Using `.toBeCloseTo()`

is very practical, but it can cause some problems. Some basic mathematics properties are:
a number should equal itself: for any number *a*, *a* should equal *a*

- If a number
*a*equals number*b*, then*b*should...