// REQUIRES: node

// Verify that --js and --text cannot be used together.
// RUN: not wasm-reduce %s --js --text -t %t.test.js -w %t.working.js '--command=node %t.test.js' 2>&1 | filecheck %s --check-prefix=TEXT-ERR
// TEXT-ERR: Fatal: --js and --text cannot be used together

// Verify that an error is reported when no embedded Wasm modules are found.
// RUN: echo "console.log('no wasm');" > %t.empty.js
// RUN: not wasm-reduce %t.empty.js --js -t %t.test.js -w %t.working.js '--command=node %t.test.js' 2>&1 | filecheck %s --check-prefix=EMPTY-ERR
// EMPTY-ERR: Fatal: no embedded wasm modules found

// Reduce a single embedded Wasm module in a JS file and verify the reduced JS
// output and execution behavior.
// RUN: wasm-reduce %s --js -t %t.test.js -w %t.working.js '--command=node %t.test.js' 2>&1 | filecheck %s --check-prefix=LOG
// RUN: filecheck %s < %t.working.js
// RUN: node %t.working.js | filecheck %s --check-prefix=OUT

// LOG: |reducing embedded module 0 of 1
// LOG: |input size: 57
// LOG: |finished, final size: 39

// Reduced module:
// (module
//   (func (export "answer") (result i32)
//     (i32.const 42)
//   )
// )
// CHECK:      const bytes = new Uint8Array([
// CHECK-NEXT:   0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x05, 0x01, 0x60, 0x00, 0x01, 0x7f, 0x03,
// CHECK-NEXT:   0x02, 0x01, 0x00, 0x07, 0x0a, 0x01, 0x06, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x00, 0x00, 0x0a,
// CHECK-NEXT:   0x06, 0x01, 0x04, 0x00, 0x41, 0x2a, 0x0b
// CHECK-NEXT: ]);
// CHECK-NEXT: const inst = new WebAssembly.Instance(new WebAssembly.Module(bytes));
// CHECK-NEXT: console.log(inst.exports.answer());

// OUT: 42

// Original module (57 bytes):
// (module
//   (func $unused (param i32) (result i32)
//     (i32.mul (local.get 0) (i32.const 99))
//   )
//   (func (export "answer") (result i32)
//     (i32.add (i32.const 40) (i32.const 2))
//   )
// )
const bytes = new Uint8Array([
  // Magic ("\0asm") and version (1)
  0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00,
  // Type section: 2 types
  0x01, 0x0a, 0x02,
  0x60, 0x01, 0x7f, 0x01, 0x7f, // type 0: (func (param i32) (result i32)) [removed with $unused]
  0x60, 0x00, 0x01, 0x7f,       // type 1: (func (result i32)) [kept]
  // Function section: 2 functions (type 0 [removed], type 1 [kept])
  0x03, 0x03, 0x02, 0x00, 0x01,
  // Export section: export "answer" -> func 1
  0x07, 0x0a, 0x01, 0x06, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x00, 0x01,
  // Code section: 2 function bodies
  0x0a, 0x12, 0x02,
  0x08, 0x00, 0x20, 0x00, 0x41, 0xe3, 0x00, 0x6c, 0x0b, // func 0 ($unused): (i32.mul (local.get 0) (i32.const 99)) [removed]
  0x07, 0x00, 0x41, 0x28, 0x41, 0x02, 0x6a, 0x0b        // func 1 ("answer"): (i32.add (i32.const 40) (i32.const 2)) [simplified to (i32.const 42)]
]);
const inst = new WebAssembly.Instance(new WebAssembly.Module(bytes));
console.log(inst.exports.answer());
