Explorar o código

Add tests to cover const prop of sign extend operator

Michael Ferris %!s(int64=8) %!d(string=hai) anos
pai
achega
ea5435cffc

+ 1 - 0
test/WasmSpec/baselines/chakra_extends_i32.baseline

@@ -0,0 +1 @@
+15/15 tests passed.

+ 1 - 0
test/WasmSpec/baselines/chakra_extends_i64.baseline

@@ -0,0 +1 @@
+25/25 tests passed.

+ 37 - 0
test/WasmSpec/chakra/chakra_extends_i32.wast

@@ -0,0 +1,37 @@
+;;-------------------------------------------------------------------------------------------------------
+;; Copyright (C) Microsoft. All rights reserved.
+;; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
+;;-------------------------------------------------------------------------------------------------------
+;;AUTO-GENERATED do not modify
+
+(module
+  (func (export "extend8_s0") (result i32) (i32.extend8_s (i32.const 0)))
+  (func (export "extend8_s1") (result i32) (i32.extend8_s (i32.const 0x7f)))
+  (func (export "extend8_s2") (result i32) (i32.extend8_s (i32.const 0x80)))
+  (func (export "extend8_s3") (result i32) (i32.extend8_s (i32.const 0xff)))
+  (func (export "extend8_s4") (result i32) (i32.extend8_s (i32.const 0x012345_00)))
+  (func (export "extend8_s5") (result i32) (i32.extend8_s (i32.const 0xfedcba_80)))
+  (func (export "extend8_s6") (result i32) (i32.extend8_s (i32.const -1)))
+  (func (export "extend16_s7") (result i32) (i32.extend16_s (i32.const 0)))
+  (func (export "extend16_s8") (result i32) (i32.extend16_s (i32.const 0x7fff)))
+  (func (export "extend16_s9") (result i32) (i32.extend16_s (i32.const 0x8000)))
+  (func (export "extend16_s10") (result i32) (i32.extend16_s (i32.const 0xffff)))
+  (func (export "extend16_s11") (result i32) (i32.extend16_s (i32.const 0x0123_0000)))
+  (func (export "extend16_s12") (result i32) (i32.extend16_s (i32.const 0xfedc_8000)))
+  (func (export "extend16_s13") (result i32) (i32.extend16_s (i32.const -1)))
+)
+
+(assert_return (invoke "extend8_s0") (i32.const 0))
+(assert_return (invoke "extend8_s1") (i32.const 127))
+(assert_return (invoke "extend8_s2") (i32.const -128))
+(assert_return (invoke "extend8_s3") (i32.const -1))
+(assert_return (invoke "extend8_s4") (i32.const 0))
+(assert_return (invoke "extend8_s5") (i32.const -0x80))
+(assert_return (invoke "extend8_s6") (i32.const -1))
+(assert_return (invoke "extend16_s7") (i32.const 0))
+(assert_return (invoke "extend16_s8") (i32.const 32767))
+(assert_return (invoke "extend16_s9") (i32.const -32768))
+(assert_return (invoke "extend16_s10") (i32.const -1))
+(assert_return (invoke "extend16_s11") (i32.const 0))
+(assert_return (invoke "extend16_s12") (i32.const -0x8000))
+(assert_return (invoke "extend16_s13") (i32.const -1))

+ 57 - 0
test/WasmSpec/chakra/chakra_extends_i64.wast

@@ -0,0 +1,57 @@
+;;-------------------------------------------------------------------------------------------------------
+;; Copyright (C) Microsoft. All rights reserved.
+;; Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
+;;-------------------------------------------------------------------------------------------------------
+;;AUTO-GENERATED do not modify
+
+(module
+  (func (export "extend8_s0") (result i64) (i64.extend8_s (i64.const 0)))
+  (func (export "extend8_s1") (result i64) (i64.extend8_s (i64.const 0x7f)))
+  (func (export "extend8_s2") (result i64) (i64.extend8_s (i64.const 0x80)))
+  (func (export "extend8_s3") (result i64) (i64.extend8_s (i64.const 0xff)))
+  (func (export "extend8_s4") (result i64) (i64.extend8_s (i64.const 0x01234567_89abcd_00)))
+  (func (export "extend8_s5") (result i64) (i64.extend8_s (i64.const 0xfedcba98_765432_80)))
+  (func (export "extend8_s6") (result i64) (i64.extend8_s (i64.const -1)))
+  (func (export "extend16_s7") (result i64) (i64.extend16_s (i64.const 0)))
+  (func (export "extend16_s8") (result i64) (i64.extend16_s (i64.const 0x7fff)))
+  (func (export "extend16_s9") (result i64) (i64.extend16_s (i64.const 0x8000)))
+  (func (export "extend16_s10") (result i64) (i64.extend16_s (i64.const 0xffff)))
+  (func (export "extend16_s11") (result i64) (i64.extend16_s (i64.const 0x12345678_9abc_0000)))
+  (func (export "extend16_s12") (result i64) (i64.extend16_s (i64.const 0xfedcba98_7654_8000)))
+  (func (export "extend16_s13") (result i64) (i64.extend16_s (i64.const -1)))
+  (func (export "extend32_s14") (result i64) (i64.extend32_s (i64.const 0)))
+  (func (export "extend32_s15") (result i64) (i64.extend32_s (i64.const 0x7fff)))
+  (func (export "extend32_s16") (result i64) (i64.extend32_s (i64.const 0x8000)))
+  (func (export "extend32_s17") (result i64) (i64.extend32_s (i64.const 0xffff)))
+  (func (export "extend32_s18") (result i64) (i64.extend32_s (i64.const 0x7fffffff)))
+  (func (export "extend32_s19") (result i64) (i64.extend32_s (i64.const 0x80000000)))
+  (func (export "extend32_s20") (result i64) (i64.extend32_s (i64.const 0xffffffff)))
+  (func (export "extend32_s21") (result i64) (i64.extend32_s (i64.const 0x01234567_00000000)))
+  (func (export "extend32_s22") (result i64) (i64.extend32_s (i64.const 0xfedcba98_80000000)))
+  (func (export "extend32_s23") (result i64) (i64.extend32_s (i64.const -1)))
+)
+
+(assert_return (invoke "extend8_s0") (i64.const 0))
+(assert_return (invoke "extend8_s1") (i64.const 127))
+(assert_return (invoke "extend8_s2") (i64.const -128))
+(assert_return (invoke "extend8_s3") (i64.const -1))
+(assert_return (invoke "extend8_s4") (i64.const 0))
+(assert_return (invoke "extend8_s5") (i64.const -0x80))
+(assert_return (invoke "extend8_s6") (i64.const -1))
+(assert_return (invoke "extend16_s7") (i64.const 0))
+(assert_return (invoke "extend16_s8") (i64.const 32767))
+(assert_return (invoke "extend16_s9") (i64.const -32768))
+(assert_return (invoke "extend16_s10") (i64.const -1))
+(assert_return (invoke "extend16_s11") (i64.const 0))
+(assert_return (invoke "extend16_s12") (i64.const -0x8000))
+(assert_return (invoke "extend16_s13") (i64.const -1))
+(assert_return (invoke "extend32_s14") (i64.const 0))
+(assert_return (invoke "extend32_s15") (i64.const 32767))
+(assert_return (invoke "extend32_s16") (i64.const 32768))
+(assert_return (invoke "extend32_s17") (i64.const 65535))
+(assert_return (invoke "extend32_s18") (i64.const 0x7fffffff))
+(assert_return (invoke "extend32_s19") (i64.const -0x80000000))
+(assert_return (invoke "extend32_s20") (i64.const -1))
+(assert_return (invoke "extend32_s21") (i64.const 0))
+(assert_return (invoke "extend32_s22") (i64.const -0x80000000))
+(assert_return (invoke "extend32_s23") (i64.const -1))

+ 4 - 0
test/WasmSpec/convert-test-suite/config.json

@@ -32,6 +32,10 @@
     "flags": ["-wasmSignExtend2"],
     "folders": [
       "features/extends"
+    ],
+    "files": [
+      "chakra_extends_i32",
+      "chakra_extends_i64"
     ]
   }],
   "excludes": [

+ 2 - 2
test/WasmSpec/convert-test-suite/generateTests/chakra_intConst.js

@@ -76,8 +76,8 @@ function extractModule(moduleNode) {
 }
 
 module.exports = function(src, suite) {
-  const originalI64Wast = path.resolve(suite, `${src}.wast`);
-  const originalContent = fs.readFileSync(originalI64Wast).toString();
+  const originalWast = path.resolve(suite, `${src}.wast`);
+  const originalContent = fs.readFileSync(originalWast).toString();
   return new Promise((resolve, reject) => {
     let id = 0;
     const newModuleContent = [];

+ 13 - 2
test/WasmSpec/convert-test-suite/generateTests/index.js

@@ -3,10 +3,21 @@
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
 const chakraIntConst = require("./chakra_intConst");
+const path = require("path");
 
 const genTests = [
-  {name: "chakra_i64", getContent: chakraIntConst.bind(null, "i64")},
-  {name: "chakra_i32", getContent: chakraIntConst.bind(null, "i32")},
+  {name: "chakra_i64", getContent(rlRoot) {
+    return chakraIntConst("i64", path.join(rlRoot, "testsuite", "core"));
+  }},
+  {name: "chakra_i32", getContent(rlRoot) {
+    return chakraIntConst("i32", path.join(rlRoot, "testsuite", "core"));
+  }},
+  {name: "chakra_extends_i32", getContent(rlRoot) {
+    return chakraIntConst("extends_i32", path.join(rlRoot, "features", "extends"));
+  }},
+  {name: "chakra_extends_i64", getContent(rlRoot) {
+    return chakraIntConst("extends_i64", path.join(rlRoot, "features", "extends"));
+  }},
 ];
 
 module.exports = genTests;

+ 22 - 7
test/WasmSpec/convert-test-suite/index.js

@@ -5,11 +5,11 @@
 /* eslint-env node */
 const path = require("path");
 const fs = require("fs-extra");
-const bluebird = require("bluebird");
+const Bluebird = require("bluebird");
 const {spawn} = require("child_process");
 const slash = require("slash");
 
-bluebird.promisifyAll(fs);
+Bluebird.promisifyAll(fs);
 const config = require("./config.json");
 const rlRoot = path.resolve(__dirname, "..");
 const folders = config.folders.map(folder => path.resolve(rlRoot, folder));
@@ -53,12 +53,11 @@ function removePossiblyEmptyFolder(folder) {
 
 function generateChakraTests() {
   const chakraTestsDestination = path.join(rlRoot, "chakra");
-  const coreTests = path.join(rlRoot, "testsuite", "core");
 
   const chakraTests = require("./generateTests");
   return removePossiblyEmptyFolder(chakraTestsDestination)
     .then(() => fs.ensureDirAsync(chakraTestsDestination))
-    .then(() => Promise.all(chakraTests.map(test => test.getContent(coreTests)
+    .then(() => Promise.all(chakraTests.map(test => test.getContent(rlRoot)
       .then(content => {
         if (!content) {
           return;
@@ -79,7 +78,7 @@ function main() {
   let runs;
   return generateChakraTests(
     // Walk all the folders to find test files
-  ).then(() => bluebird.reduce(folders, (specFiles, folder) => new Promise((resolve) => {
+  ).then(() => Bluebird.reduce(folders, (specFiles, folder) => new Promise((resolve) => {
     fs.walk(folder)
       .on("data", item => {
         const ext = path.extname(item.path);
@@ -188,7 +187,7 @@ duplicate: ${file.path}`);
     }
     fs.removeSync(baselineDir);
     fs.ensureDirSync(baselineDir);
-    return Promise.all(runs.map(run => new Promise((resolve, reject) => {
+    const startRuns = runs.map(run => () => new Bluebird((resolve, reject) => {
       const test = run[0];
       const baseline = fs.createWriteStream(test.baseline);
       baseline.on("open", () => {
@@ -207,7 +206,23 @@ duplicate: ${file.path}`);
         engine.on("close", resolve);
       });
       baseline.on("error", reject);
-    })));
+    }));
+
+    const cucurrentRuns = 8;
+    let running = startRuns.splice(0, cucurrentRuns).map(start => start());
+    return new Promise((resolve, reject) => {
+      const checkIfContinue = () => {
+        // Keep only runs that are not done
+        running = running.filter(run => !run.isFulfilled());
+        // If we have nothing left to run, terminate
+        if (running.length === 0 && startRuns.length === 0) {
+          return resolve();
+        }
+        running.push(...(startRuns.splice(0, cucurrentRuns - running.length).map(start => start())));
+        Bluebird.any(running).then(checkIfContinue).catch(reject);
+      };
+      checkIfContinue();
+    });
   });
 }
 

+ 30 - 0
test/WasmSpec/rlexe.xml

@@ -1,6 +1,36 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- Auto Generated by convert-test-suite -->
 <regress-exe>
+  <test>
+    <default>
+      <files>spec.js</files>
+      <baseline>baselines/chakra_extends_i32.baseline</baseline>
+      <compile-flags>-wasm -args chakra/chakra_extends_i32.wast -endargs -wasmSignExtend2</compile-flags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>spec.js</files>
+      <baseline>baselines/chakra_extends_i32.baseline</baseline>
+      <compile-flags>-wasm -args chakra/chakra_extends_i32.wast -endargs -nonative -wasmSignExtend2</compile-flags>
+      <tags>exclude_dynapogo</tags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>spec.js</files>
+      <baseline>baselines/chakra_extends_i64.baseline</baseline>
+      <compile-flags>-wasm -args chakra/chakra_extends_i64.wast -endargs -wasmSignExtend2</compile-flags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>spec.js</files>
+      <baseline>baselines/chakra_extends_i64.baseline</baseline>
+      <compile-flags>-wasm -args chakra/chakra_extends_i64.wast -endargs -nonative -wasmSignExtend2</compile-flags>
+      <tags>exclude_dynapogo</tags>
+    </default>
+  </test>
   <test>
     <default>
       <files>spec.js</files>