mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-15 04:32:21 +00:00
* fully refactor run_tests.py, make it extensible for the future * an ability to write @compilation_should_fail tests * an ability to launch run_tests.py for a single .fc file * keep run_tests.js in sync with run_tests.py * extract legacy_tests names/hashes to a separate file shared between legacy_tester.py and legacy_tester.js
68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
// Usage: `node legacy_tests.js` from current dir, providing some env (see getenv() calls).
|
|
// This is a JS version of legacy_tester.py to test FunC compiled to WASM.
|
|
|
|
const fs = require('fs');
|
|
const path = require('path')
|
|
const process = require('process');
|
|
const { compileWasm, compileFile } = require('./wasm_tests_common');
|
|
|
|
|
|
/** @return {string} */
|
|
function getenv(name, def = null) {
|
|
if (name in process.env)
|
|
return process.env[name]
|
|
if (def === null) {
|
|
console.log(`Environment variable ${name} is not set`)
|
|
process.exit(1)
|
|
}
|
|
return def
|
|
}
|
|
|
|
const FUNCFIFTLIB_MODULE = getenv('FUNCFIFTLIB_MODULE')
|
|
const FUNCFIFTLIB_WASM = getenv('FUNCFIFTLIB_WASM')
|
|
const TESTS_DIR = "legacy_tests"
|
|
|
|
/**
|
|
* @return {{filename: string, code_hash: BigInt}[]}
|
|
*/
|
|
function load_legacy_tests_list(jsonl_filename) {
|
|
let contents = fs.readFileSync(jsonl_filename)
|
|
let results = [...contents.toString().matchAll(/^\[\s*"(.*?)"\s*,\s*(.*?)\s*]/gms)]
|
|
return results.map((line) => ({
|
|
filename: line[1].trim(),
|
|
code_hash: BigInt(line[2]),
|
|
}))
|
|
}
|
|
|
|
async function main() {
|
|
const tests = load_legacy_tests_list('legacy_tests.jsonl')
|
|
|
|
for (let ti = 0; ti < tests.length; ++ti) {
|
|
const {filename: filename_rel, code_hash} = tests[ti]
|
|
const filename = path.join(TESTS_DIR, filename_rel)
|
|
console.log(`Running test ${ti + 1}/${tests.length}: ${filename_rel}`)
|
|
|
|
if (filename.includes('storage-provider')) {
|
|
console.log(" Skip");
|
|
continue;
|
|
}
|
|
|
|
const wasmModule = await compileWasm(FUNCFIFTLIB_MODULE, FUNCFIFTLIB_WASM)
|
|
const response = compileFile(wasmModule, filename);
|
|
|
|
if (response.status !== 'ok') {
|
|
console.error(response);
|
|
throw new Error(`Could not compile ${filename}`);
|
|
}
|
|
|
|
if (BigInt('0x' + response.codeHashHex) !== code_hash) {
|
|
throw new Error(`Code hash is different for ${filename}`);
|
|
}
|
|
|
|
console.log(' OK ');
|
|
}
|
|
|
|
console.log(`Done ${tests.length}`)
|
|
}
|
|
|
|
main().catch(console.error)
|