From 3e1ab317587b7f6646717b13a427239e2af3f5ac Mon Sep 17 00:00:00 2001 From: Thad Kerosky Date: Tue, 30 Mar 2021 19:54:51 -0400 Subject: [PATCH 1/5] first draft of versioned detailed calculator --- gatsby-node.js | 11 ++- package-lock.json | 8 ++ src/library/anypiajs.mjs | 164 ++++++++++++++++++++++++++++++++++--- src/test/pia-index.test.ts | 87 +++++++++++++------- static/anypiajs-20201.wasm | Bin 0 -> 1705022 bytes 5 files changed, 225 insertions(+), 45 deletions(-) create mode 100644 static/anypiajs-20201.wasm diff --git a/gatsby-node.js b/gatsby-node.js index 857a6cfed..ca1b68bc0 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -4,4 +4,13 @@ * See: https://www.gatsbyjs.org/docs/node-apis/ */ -// You can delete this file if you're not using it \ No newline at end of file +// You can delete this file if you're not using it + +exports.onCreateWebpackConfig = ({ stage, actions }) => { + actions.setWebpackConfig({ + + //allow us to not use ENVIRONMENT=web when compiling anypia-js, test it + // https://stackoverflow.com/questions/59487224/webpack-throws-error-with-emscripten-cant-resolve-fs + "node": { "fs": "empty" } + }) + } diff --git a/package-lock.json b/package-lock.json index 0473c00c5..9496eb193 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43040,6 +43040,14 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-convert": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", diff --git a/src/library/anypiajs.mjs b/src/library/anypiajs.mjs index 472f0635e..d241a5c4b 100644 --- a/src/library/anypiajs.mjs +++ b/src/library/anypiajs.mjs @@ -10,7 +10,7 @@ import 'core-js/modules/es6.typed-array.uint8-clamped-array' // See: https://stackoverflow.com/questions/63592691/core-js-cannot-resolve-core-js-modules-es6-typed-uint32-array/63592692#63592692 var Module = (function() { - var _scriptDir = '/anypiajs.wasm'; + var _scriptDir = '/anypiajs-20201.wasm'; return ( function(Module) { @@ -193,10 +193,16 @@ var quit_ = function(status, toThrow) { // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). -var ENVIRONMENT_IS_WEB = true; +var ENVIRONMENT_IS_WEB = false; var ENVIRONMENT_IS_WORKER = false; var ENVIRONMENT_IS_NODE = false; var ENVIRONMENT_IS_SHELL = false; +ENVIRONMENT_IS_WEB = typeof window === 'object'; +ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; +ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; if (Module['ENVIRONMENT']) { throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)'); @@ -219,6 +225,104 @@ var read_, readBinary, setWindowTitle; +var nodeFS; +var nodePath; + +if (ENVIRONMENT_IS_NODE) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require('path').dirname(scriptDirectory) + '/'; + } else { + scriptDirectory = __dirname + '/'; + } + + + + + read_ = function shell_read(filename, binary) { + if (!nodeFS) nodeFS = require('fs'); + if (!nodePath) nodePath = require('path'); + filename = nodePath['normalize'](filename); + return nodeFS['readFileSync'](filename, binary ? null : 'utf8'); + }; + + readBinary = function readBinary(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; + }; + + + + + if (process['argv'].length > 1) { + thisProgram = process['argv'][1].replace(/\\/g, '/'); + } + + arguments_ = process['argv'].slice(2); + + // MODULARIZE will export the module in the proper place outside, we don't need to export here + + process['on']('uncaughtException', function(ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + + process['on']('unhandledRejection', abort); + + quit_ = function(status) { + process['exit'](status); + }; + + Module['inspect'] = function () { return '[Emscripten Module object]'; }; + + + +} else +if (ENVIRONMENT_IS_SHELL) { + + + if (typeof read != 'undefined') { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + var data; + if (typeof readbuffer === 'function') { + return new Uint8Array(readbuffer(f)); + } + data = read(f, 'binary'); + assert(typeof data === 'object'); + return data; + }; + + if (typeof scriptArgs != 'undefined') { + arguments_ = scriptArgs; + } else if (typeof arguments != 'undefined') { + arguments_ = arguments; + } + + if (typeof quit === 'function') { + quit_ = function(status) { + quit(status); + }; + } + + if (typeof print !== 'undefined') { + // Prefer to use print/printErr where they exist, as they usually work better. + if (typeof console === 'undefined') console = /** @type{!Console} */({}); + console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); + console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print); + } + + +} else // Note that this includes Node.js workers when relevant (pthreads is enabled). // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and @@ -244,7 +348,6 @@ if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { scriptDirectory = ''; } - if (!(typeof window === 'object' || typeof importScripts === 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); // Differentiate the Web Worker from the Node Worker case, as reading must // be done differently. @@ -1359,11 +1462,11 @@ function updateGlobalBufferAndViews(buf) { } var STATIC_BASE = 1024, - STACK_BASE = 74208, + STACK_BASE = 74496, STACKTOP = STACK_BASE, - STACK_MAX = 5317088, - DYNAMIC_BASE = 5317088, - DYNAMICTOP_PTR = 74000; + STACK_MAX = 5317376, + DYNAMIC_BASE = 5317376, + DYNAMICTOP_PTR = 74288; assert(STACK_BASE % 16 === 0, 'stack must start aligned'); assert(DYNAMIC_BASE % 16 === 0, 'heap must start aligned'); @@ -1787,7 +1890,7 @@ function createExportWrapper(name, fixedasm) { }; } -var wasmBinaryFile = 'anypiajs.wasm'; +var wasmBinaryFile = 'anypiajs-20201.wasm'; if (!isDataURI(wasmBinaryFile)) { wasmBinaryFile = locateFile(wasmBinaryFile); } @@ -1813,6 +1916,8 @@ function getBinaryPromise() { // If we don't have the binary yet, and have the Fetch api, use that; // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function' + // Let's not use fetch to get objects over file:// as it's most likely Cordova which doesn't support fetch for file:// + && !isFileURI(wasmBinaryFile) ) { return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { if (!response['ok']) { @@ -1890,6 +1995,8 @@ function createWasm() { if (!wasmBinary && typeof WebAssembly.instantiateStreaming === 'function' && !isDataURI(wasmBinaryFile) && + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(wasmBinaryFile) && typeof fetch === 'function') { fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { var result = WebAssembly.instantiateStreaming(response, info); @@ -1936,7 +2043,7 @@ var ASM_CONSTS = []; -// STATICTOP = STATIC_BASE + 73184; +// STATICTOP = STATIC_BASE + 73472; /* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } }); @@ -1947,7 +2054,7 @@ var ASM_CONSTS = []; /* no memory initializer */ -var tempDoublePtr = 74192; +var tempDoublePtr = 74480; function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much HEAP8[tempDoublePtr] = HEAP8[ptr]; @@ -2290,6 +2397,27 @@ function copyTempDouble(ptr) { }},default_tty_ops:{get_char:function(tty) { if (!tty.input.length) { var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); + var bytesRead = 0; + + try { + bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes, + // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0. + if (e.toString().indexOf('EOF') != -1) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } else { + result = null; + } + } else if (typeof window != 'undefined' && typeof window.prompt == 'function') { // Browser. @@ -3735,6 +3863,16 @@ function copyTempDouble(ptr) { var randomBuffer = new Uint8Array(1); random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; }; } else + if (ENVIRONMENT_IS_NODE) { + // for nodejs with or without crypto support included + try { + var crypto_module = require('crypto'); + // nodejs has crypto support + random_device = function() { return crypto_module['randomBytes'](1)[0]; }; + } catch (e) { + // nodejs doesn't have crypto support + } + } else {} if (!random_device) { // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096 @@ -6206,7 +6344,7 @@ function copyTempDouble(ptr) { } - var ___tm_timezone=(stringToUTF8("GMT", 74096, 4), 74096); + var ___tm_timezone=(stringToUTF8("GMT", 74384, 4), 74384); function _tzset() { // TODO: Use (malleable) environment variables instead of system settings. @@ -6947,8 +7085,8 @@ var dynCall_viiiiii = Module["dynCall_viiiiii"] = createExportWrapper("dynCall_v /** @type {function(...*):?} */ var dynCall_viijii = Module["dynCall_viijii"] = createExportWrapper("dynCall_viijii"); -Module['__ZZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPKvE5__fmt'] = 62561; -Module['__ZZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwmE5__fmt'] = 62572;; +Module['__ZZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPKvE5__fmt'] = 62847; +Module['__ZZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwmE5__fmt'] = 62858;; diff --git a/src/test/pia-index.test.ts b/src/test/pia-index.test.ts index a53b5786d..43a2df5bc 100644 --- a/src/test/pia-index.test.ts +++ b/src/test/pia-index.test.ts @@ -1,46 +1,71 @@ // TODO ENABLE NODEJS mode for Emscripten Module and uncomment this file // will not work without this. Also need to find way to reference wasm file for tests since /anypiajs.wasm won't workA -// import { finalCalculation } from "../library/pia/index"; -// import { delayedRetirementValues, fullRetirementValues, sample20RetirementValues } from "../library/testFiles"; -// import { -// finalCalculation as originalFinalCalculation, -// getRawEarnings, -// } from "../library/observable-functions"; +import { finalCalculation } from "../library/pia/index"; +import { delayedRetirementValues, fullRetirementValues, sample20RetirementValues } from "../library/testFiles"; +import { + finalCalculation as originalFinalCalculation, + getRawEarnings, +} from "../library/observable-functions"; +import dayjs from "dayjs"; + + describe("Run AnyPIAJS", () => { - it("once it is recompiled with NodeJS support", async () => { + it("Now it has NodeJS support", async () => { expect.assertions(1); expect(null).toBe(null); }); }); +// TODO: +// Do an approach like this: https://github.com/emscripten-core/emscripten/issues/8400#issuecomment-498218291 +describe("John Q. Public (Full Retirement)", async () => { + + beforeAll(async () => { + var loader = ???(); + loader.ready = () => + // https://github.com/emscripten-core/emscripten/issues/5820 + new Promise((resolve, reject) => { + delete loader.then; + loader.onAbort = reject; + loader.addOnPostRun(() => { + resolve(loader); + }); + }); + ??? = await loader.ready(); +}); -// describe("John Q. Public (Full Retirement)", async () => { -// const earnings = -// fullRetirementValues["osss:OnlineSocialSecurityStatementData"][ -// "osss:EarningsRecord" -// ]["osss:Earnings"]; -// const userDOB = new Date("1947-10-10"); -// const userDOR = new Date("2013-10-10"); // 66 is their full retirement age -// const rawEarnings = getRawEarnings(earnings); -// const userPension = 0; - -// const piaUserCal = await finalCalculation( -// userDOB, -// userDOR, -// userPension, -// rawEarnings -// ); -// // var userCalc = await finalCalculation(userDOB, userDOR, year62, userYSE, userPension, userAIME) - -// const userYSE = Number(piaUserCal["yearsSubstantialEarnings"]); - -// it("Correctly tallies years of substantial earnings from a full earnings record.", async () => { -// expect.assertions(1); + const earnings = + fullRetirementValues["osss:OnlineSocialSecurityStatementData"][ + "osss:EarningsRecord" + ]["osss:Earnings"]; + + const userDOB = "1947-10-10"; + const userDOR = dayjs("2013-10-10").toDate(); // 66yo is their full retirement age. + //const year62 = "2014"; + const rawEarnings = getRawEarnings(earnings); + const userPension = 0; + + const piaUserCal = await finalCalculation( + userDOB, + userDOR, + userPension, + rawEarnings, + null, + null, + null,null + ); + // var userCalc = await finalCalculation(userDOB, userDOR, year62, userYSE, userPension, userAIME) + + const userYSE = Number(piaUserCal["yearsSubstantialEarnings"]); + + it("Correctly tallies years of substantial earnings from a full earnings record.", async () => { + expect.assertions(1); -// expect(userYSE).toBe(30); -// }); + expect(userYSE).toBe(30); + }); +}); // it("Correctly calculates AIME from a full earnings record.", async () => { // expect.assertions(1); diff --git a/static/anypiajs-20201.wasm b/static/anypiajs-20201.wasm new file mode 100644 index 0000000000000000000000000000000000000000..c001b78dd0d4d11bae1a8a241c39f5146a508a2d GIT binary patch literal 1705022 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