function assert(x) {
  if (!x) throw 'error!';
}

var wast = `
(module
 (type $v (func))
 (memory $0 0)
 (export "test" (func $test))
 (func $test (; 0 ;) (type $v))
)
`;

// Use defaults (should not emit debug info)
console.log("=== default ===");
console.log("debugInfo=" + Binaryen.getDebugInfo());
var module = Binaryen.parseText(wast);
var binary = module.emitBinary();
module.dispose();
module = Binaryen.readBinary(binary);
console.log(module.emitText());
assert(module.validate());
module.dispose();

// With debug info
console.log("=== with debug info ===");
Binaryen.setDebugInfo(true);
console.log("debugInfo=" + Binaryen.getDebugInfo());
module = Binaryen.parseText(wast);
binary = module.emitBinary();
module.dispose();
module = Binaryen.readBinary(binary);
console.log(module.emitText());
assert(module.validate());
module.dispose();

// Without debug info
console.log("=== without debug info ===");
Binaryen.setDebugInfo(false);
console.log("debugInfo=" + Binaryen.getDebugInfo());
module = Binaryen.parseText(wast);
binary = module.emitBinary();
module.dispose();
module = Binaryen.readBinary(binary);
console.log(module.emitText());
assert(module.validate());
module.dispose();
