From 9f7ed5629023e2051a3981d696144eee32ba2f5f Mon Sep 17 00:00:00 2001 From: Fahim Faisaal <57553028+fahimfaisaal@users.noreply.github.com> Date: Sun, 20 Mar 2022 13:36:13 +0600 Subject: [PATCH] merge: Remove duplicate helper functions in cache tests. (#933) * refactor: added one implementation of fibonacciCahce * chore: move union function * chore: renamed the cacheTest file --- Cache/test/LFUCache.test.js | 23 ++++------------------- Cache/test/LRUCache.test.js | 21 ++------------------- Cache/test/Memoize.test.js | 12 +----------- Cache/test/cacheTest.js | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 49 deletions(-) create mode 100644 Cache/test/cacheTest.js diff --git a/Cache/test/LFUCache.test.js b/Cache/test/LFUCache.test.js index 5e4bd67ac..94ac0165e 100644 --- a/Cache/test/LFUCache.test.js +++ b/Cache/test/LFUCache.test.js @@ -1,4 +1,5 @@ import { LFUCache } from '../LFUCache' +import { fibonacciCache } from './cacheTest' describe('LFUCache', () => { it('Example 1 (Small Cache, size=2)', () => { @@ -28,27 +29,11 @@ describe('LFUCache', () => { it('Example 2 (Computing Fibonacci Series, size=100)', () => { const cache = new LFUCache(100) + for (let i = 1; i <= 100; i++) { - fib(i, cache) + fibonacciCache(i, cache) } + expect(cache.cacheInfo()).toBe('CacheInfo(hits=193, misses=103, capacity=100, current size=98)') }) }) - -// Helper for building and caching Fibonacci series -function fib (num, cache = null) { - if (cache) { - const value = cache.get(num) - if (value) { - return value - } - } - if (num === 1 || num === 2) { - return 1 - } - const result = fib(num - 1, cache) + fib(num - 2, cache) - if (cache) { - cache.set(num, result) - } - return result -} diff --git a/Cache/test/LRUCache.test.js b/Cache/test/LRUCache.test.js index 6ebeb1a01..b03d609d6 100644 --- a/Cache/test/LRUCache.test.js +++ b/Cache/test/LRUCache.test.js @@ -1,4 +1,5 @@ import { LRUCache } from '../LRUCache' +import { fibonacciCache } from './cacheTest' describe('LRUCache', () => { it('Example 1 (Small Cache, size=2)', () => { @@ -29,26 +30,8 @@ describe('LRUCache', () => { it('Example 2 (Computing Fibonacci Series, size=100)', () => { const cache = new LRUCache(100) for (let i = 1; i <= 100; i++) { - fib(i, cache) + fibonacciCache(i, cache) } expect(cache.cacheInfo()).toBe('CacheInfo(hits=193, misses=103, capacity=100, current size=98)') }) }) - -// Helper for building and caching Fibonacci series -function fib (num, cache = null) { - if (cache) { - const value = cache.get(num) - if (value) { - return value - } - } - if (num === 1 || num === 2) { - return 1 - } - const result = fib(num - 1, cache) + fib(num - 2, cache) - if (cache) { - cache.set(num, result) - } - return result -} diff --git a/Cache/test/Memoize.test.js b/Cache/test/Memoize.test.js index f6ecee712..5d5948c48 100644 --- a/Cache/test/Memoize.test.js +++ b/Cache/test/Memoize.test.js @@ -1,20 +1,10 @@ import { memoize } from '../Memoize' +import { union } from './cacheTest' import { fibonacci } from '../../Dynamic-Programming/FibonacciNumber' import { factorial } from '../../Recursive/Factorial' const multipleFactorials = (arr) => arr.map(factorial) -/** - * @title implementation of union function - * @param {Set} sets - * @return {new Set} - */ -function union (...sets) { - return new Set( - sets.reduce((flatArray, set) => [...flatArray, ...set], []) - ) -} - describe('Testing Memoize', () => { it('expects the fibonacci function to use the cache on the second call', () => { const memoFibonacci = memoize(fibonacci) diff --git a/Cache/test/cacheTest.js b/Cache/test/cacheTest.js new file mode 100644 index 000000000..aecdcc619 --- /dev/null +++ b/Cache/test/cacheTest.js @@ -0,0 +1,37 @@ +/** + * @function fibonacciCache + * @description - this is a cached variant of fib number + * @param {number} n - Real number (n > -1) + * @param {Object} cache + * @returns {number} + */ +export const fibonacciCache = (n, cache = null) => { + if (cache) { + const value = cache.get(n) + + if (value !== null) { + return value + } + } + + if (n === 1 || n === 2) { + return 1 + } + + const result = fibonacciCache(n - 1, cache) + fibonacciCache(n - 2, cache) + + cache && cache.set(n, result) + + return result +} + +/** + * @title implementation of union function + * @param {Set} sets + * @return {new Set} + */ +export const union = (...sets) => { + return new Set( + sets.reduce((flatArray, set) => [...flatArray, ...set], []) + ) +}