function assert(value, desc){ var res = $("#results"); var li = document.createElement("li"); li.className = value ? "pass" : "fail"; li.appendChild(document.createTextNode(desc)); res.append(li); } // adding a property to a function so that it can remember its previously computed results - this concept is called memoization function isPrimeNumber(num){ if(!isPrimeNumber.cache) isPrimeNumber.cache = {}; if(isPrimeNumber.cache[num] != null){ return isPrimeNumber.cache[num]; } var result = num != 1; for(var i=2;i<num;i++){ if(num % i == 0){ result = false; break; } } return isPrimeNumber.cache[num] = result; } assert(isPrimeNumber(5),"5 is a prime number"); assert(!isPrimeNumber(4), "4 is not a prime number"); assert(isPrimeNumber.cache[5], "Result for 5 is cached");
<div id="results"/>
body{ margin:10px; } .pass{ color:green; } .fail{ color:red; text-decoration:line-through; }