From 1527af3e308afae3a05cb0bb4742ec2ba0ab6a22 Mon Sep 17 00:00:00 2001 From: Yulong Wang <7679871+fs-eire@users.noreply.github.com> Date: Tue, 12 Oct 2021 22:37:19 -0700 Subject: [PATCH] [js/web] deduplicate test cases between opsets (#9327) * [js/web] deduplicate test cases between opsets * fix eslint error --- js/web/package-lock.json | 57 +++++++++++++++++++----------- js/web/package.json | 5 +-- js/web/script/prepare-test-data.ts | 41 +++++++++++++++++---- 3 files changed, 73 insertions(+), 30 deletions(-) diff --git a/js/web/package-lock.json b/js/web/package-lock.json index 2120de4e11..a0a3422480 100644 --- a/js/web/package-lock.json +++ b/js/web/package-lock.json @@ -911,6 +911,12 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -1064,9 +1070,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "is-fullwidth-code-point": { @@ -1513,6 +1519,16 @@ } } }, + "dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2820,9 +2836,9 @@ } }, "jszip": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", - "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "dev": true, "requires": { "lie": "~3.3.0", @@ -3480,9 +3496,9 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "npm-conf": { @@ -3699,9 +3715,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -5133,9 +5149,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -5197,9 +5213,9 @@ "dev": true }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true }, "xtend": { @@ -5237,8 +5253,7 @@ "dependencies": { "ansi-regex": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "resolved": "", "dev": true }, "is-fullwidth-code-point": { @@ -5304,4 +5319,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/js/web/package.json b/js/web/package.json index 58c76bb501..6f9332421e 100644 --- a/js/web/package.json +++ b/js/web/package.json @@ -44,10 +44,11 @@ "@types/npmlog": "^4.1.2", "@types/platform": "^1.3.3", "chai": "^4.3.4", + "dir-compare": "^3.3.0", "electron": "^12.0.2", "fs-extra": "^9.1.0", "globby": "^11.0.3", - "jszip": "^3.6.0", + "jszip": "^3.7.1", "karma": "^6.3.2", "karma-browserstack-launcher": "^1.6.0", "karma-chai": "^0.1.0", @@ -78,4 +79,4 @@ "unpkg": "dist/ort.min.js", "module": "./lib/index.js", "browser": "dist/ort-web.min.js" -} \ No newline at end of file +} diff --git a/js/web/script/prepare-test-data.ts b/js/web/script/prepare-test-data.ts index 429015f60b..f99400ab0d 100644 --- a/js/web/script/prepare-test-data.ts +++ b/js/web/script/prepare-test-data.ts @@ -2,6 +2,7 @@ // Licensed under the MIT License. import {spawnSync} from 'child_process'; +import {compareSync} from 'dir-compare'; import * as fs from 'fs-extra'; import minimist from 'minimist'; import npmlog from 'npmlog'; @@ -12,18 +13,21 @@ const DEPS_ONNX = path.join(ROOT, 'cmake', 'external', 'onnx'); const TEST_DATA_ROOT = path.join(__dirname, '..', 'test', 'data'); const TEST_DATA_NODE = path.join(TEST_DATA_ROOT, 'node'); +const TEST_DATA_OPSET_VERSIONS = [ + ['v12', 'rel-1.7.0'], + ['v11', 'rel-1.6.1'], + ['v10', 'rel-1.5.0'], + ['v9', 'rel-1.4.1'], + ['v8', 'rel-1.3.0'], + ['v7', 'rel-1.2.3'], +]; + const args = minimist(process.argv); // prepare test data only when eiter flag '-f' or '--force' is specified, or the folder does not exist. if (args.f || args.force || !fs.existsSync(TEST_DATA_NODE)) { npmlog.info('PrepareTestData', 'Preparing node tests ...'); fs.removeSync(TEST_DATA_NODE); - [['v7', 'rel-1.2.3'], - ['v8', 'rel-1.3.0'], - ['v9', 'rel-1.4.1'], - ['v10', 'rel-1.5.0'], - ['v11', 'rel-1.6.1'], - ['v12', 'rel-1.7.0'], - ].forEach(v => { + TEST_DATA_OPSET_VERSIONS.forEach(v => { const version = v[0]; const commit = v[1]; npmlog.info('PrepareTestData', `Checking out deps/onnx ${commit}...`); @@ -49,4 +53,27 @@ if (args.f || args.force || !fs.existsSync(TEST_DATA_NODE)) { process.exit(update.status === null ? undefined : update.status); } npmlog.info('PrepareTestData', 'Revert git index... DONE'); + + npmlog.info('PrepareTestData', 'Deduplicating test cases...'); + for (let i = 0; i < TEST_DATA_OPSET_VERSIONS.length - 1; i++) { + const currentVersion = TEST_DATA_OPSET_VERSIONS[i][0]; + const currentFolder = path.join(TEST_DATA_NODE, currentVersion); + const previousVersion = TEST_DATA_OPSET_VERSIONS[i + 1][0]; + const previousFolder = path.join(TEST_DATA_NODE, previousVersion); + + // compare each subfolder to its previous version. If they are same, remove the one in current version. + let count = 0; + fs.readdirSync(currentFolder, {withFileTypes: true}).forEach(dir => { + const currentDir = path.join(currentFolder, dir.name); + const previousDir = path.join(previousFolder, dir.name); + if (dir.isDirectory() && fs.existsSync(previousDir) && fs.statSync(previousDir).isDirectory()) { + if (compareSync(currentDir, previousDir, {compareContent: true}).differences === 0) { + fs.removeSync(currentDir); + count++; + } + } + }); + npmlog.info('PrepareTestData', `Deduplicated ${count} test case(s) in folder ${currentVersion}.`); + } + npmlog.info('PrepareTestData', 'Deduplicating test cases... DONE'); }