import { Foo, Bar, concat } from './smorgasboard';

function assertEq(a, b) {
    if (a !== b)
        throw new Error(`${a} != ${b}`);
    console.log(`found ${a} === ${b}`);
}

assertEq(concat('a', 'b'), 'ab');

// Note that to use `new Foo()` the constructor function must be annotated
// with `#[wasm_bindgen(constructor)]`, otherwise only `Foo.new()` can be used.
// Additionally objects allocated corresponding to Rust structs will need to
// be deallocated on the Rust side of things with an explicit call to `free`.
let foo = new Foo();
assertEq(foo.add(10), 10);
foo.free();

// Pass objects to one another
let foo1 = new Foo();
let bar = Bar.from_str('22', { opaque: 'object' });
foo1.add_other(bar);

// We also don't have to `free` the `bar` variable as this function is
// transferring ownership to `foo1`
bar.reset('34');
foo1.consume_other(bar);

assertEq(foo1.add(2), 22 + 34 + 2);
foo1.free();

alert('all passed!');
