namibia
70bc99896b9aaaa4e6eb3f875f7443896f85d758
namibia / public / min / quick-test.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
/*! This file exists only for testing a Minify installation. It's content is not used. * * http://example.org/min/f=min/quick-test.js */ /* Finds the lowest common multiple of two numbers */ function LCMCalculator(x, y) { // constructor function var checkInt = function (x) { // inner function if (x % 1 !== 0) { throw new TypeError(x + " is not an integer"); // throw an exception } return x; }; this.a = checkInt(x); // ^ semicolons are optional this.b = checkInt(y); } // The prototype of object instances created by a constructor is // that constructor's "prototype" property. LCMCalculator.prototype = { // object literal constructor: LCMCalculator, // when reassigning a prototype, set the constructor property appropriately gcd: function () { // method that calculates the greatest common divisor // Euclidean algorithm: var a = Math.abs(this.a), b = Math.abs(this.b), t; if (a < b) { // swap variables t = b; b = a; a = t; } while (b !== 0) { t = b; b = a % b; a = t; } // Only need to calculate GCD once, so "redefine" this method. // (Actually not redefinition - it's defined on the instance itself, // so that this.gcd refers to this "redefinition" instead of LCMCalculator.prototype.gcd.) // Also, 'gcd' === "gcd", this['gcd'] === this.gcd this['gcd'] = function () { return a; }; return a; }, // Object property names can be specified by strings delimited by double (") or single (') quotes. "lcm" : function () { // Variable names don't collide with object properties, e.g. |lcm| is not |this.lcm|. // not using |this.a * this.b| to avoid FP precision issues var lcm = this.a / this.gcd() * this.b; // Only need to calculate lcm once, so "redefine" this method. this.lcm = function () { return lcm; }; return lcm; }, toString: function () { return "LCMCalculator: a = " + this.a + ", b = " + this.b; } }; //define generic output function; this implementation only works for web browsers function output(x) { document.write(x + "<br>"); } // Note: Array's map() and forEach() are defined in JavaScript 1.6. // They are used here to demonstrate JavaScript's inherent functional nature. [[25, 55], [21, 56], [22, 58], [28, 56]].map(function (pair) { // array literal + mapping function return new LCMCalculator(pair[0], pair[1]); }).sort(function (a, b) { // sort with this comparative function return a.lcm() - b.lcm(); }).forEach(function (obj) { output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm()); }); |
Commits for namibia//public/min/quick-test.js
Revision | Author | Commited | Message |
---|---|---|---|
df0489 ... | Mark | Fri 14 Oct, 2016 10:01:00 +0000 | initial commit |