var module = new binaryen.Module();

// Create an expression and copy it
var original = module.block(null, [
  module.if(
    module.local.get(0, binaryen.Type.i32),
    module.i32.const(1),
    module.i32.const(2)
  )
], binaryen.Type.i32);
var copy = module.copyExpression(original);

// Check that the expression incl. sub-expressions are copies
assert(original !== copy);

var originalInfo = binaryen.getExpressionInfo(original);
assert(originalInfo.children.length === 1);

var copyInfo = binaryen.getExpressionInfo(copy);
assert(originalInfo.children.length === copyInfo.children.length);
assert(originalInfo.children[0] !== copyInfo.children[0]);

var originalIfInfo = binaryen.getExpressionInfo(originalInfo.children[0]);
var copyIfInfo = binaryen.getExpressionInfo(copyInfo.children[0]);

assert(originalIfInfo.condition !== copyIfInfo.condition);
assert(originalIfInfo.ifTrue !== copyIfInfo.ifTrue);
assert(originalIfInfo.ifFalse !== copyIfInfo.ifFalse);

// Check that both are otherwise identical
assert(binaryen.emitText(original) === binaryen.emitText(copy));
