*** Running test #1 (0): Basic import namespace
PASSED
*** Running test #2 (1): import namespace with verification
PASSED
*** Running test #3 (2): reexport only
PASSED
*** Running test #4 (3): complex reexport
PASSED
*** Running test #5 (4): namespace as prototype
PASSED
*** Running test #6 (5): namespace internal operations
PASSED
Summary of tests: total executed: 6; passed: 6; failed: 0
default=default
var7=undefined
var6=undefined
var5=undefined
var4=undefined
var3=5
var2=undefined
var1=string
foo4=function foo() { }
bar2=class bar { }
foobar=function foobar() { }
foo3=function foo() { }
baz2=function* baz() { }
foo2=function foo() { }
baz=function* baz() { }
bar=class bar { }
foo=function foo() { }
const6=
const5=[object Object]
const4=4
const3=3
const2=str
let7=
let6=[object Object]
let5=undefined
let4=undefined
let3=undefined
let2=2
let1=undefined
cl2=class cl2 { }
cl1=class cl1 { }
gn2=function* gn2() { }
gn1=function* gn1() { }
fn2=function fn2() { }
fn1=function fn1() { }
default=default
var7=undefined
var6=undefined
var5=undefined
var4=undefined
var3=5
var2=undefined
var1=string
foo4=function foo() { }
bar2=class bar { }
foobar=function foobar() { }
foo3=function foo() { }
baz2=function* baz() { }
foo2=function foo() { }
baz=function* baz() { }
bar=class bar { }
foo=function foo() { }
const6=
const5=[object Object]
const4=4
const3=3
const2=str
let7=
let6=[object Object]
let5=undefined
let4=undefined
let3=undefined
let2=2
let1=undefined
cl2=class cl2 { }
cl1=class cl1 { }
gn2=function* gn2() { }
gn1=function* gn1() { }
fn2=function fn2() { }
fn1=function fn1() { }
in iterator
bar
bar2
baz
baz2
cl1
cl2
const2
const3
const4
const5
const6
default
fn1
fn2
foo
foo2
foo3
foo4
foobar
gn1
gn2
let1
let2
let3
let4
let5
let6
let7
var1
var2
var3
var4
var5
var6
var7
done with iterator
verifyNamespace=function verifyNamespace(ns)

{

    var unused = 1;

    for (var i in ns) helpers.writeln(i + " = " + ns[i]);

    assert.areEqual(ns.var7, var7, "var7 is the same");

    assert.areEqual(ns.var6, var6, "var6 is the same");

    assert.areEqual(ns.var5, var5, "var5 is the same");

    assert.areEqual(ns.var4, var4, "var4 is the same");

    assert.areEqual(ns.var3, var3, "var3 is the same");

    assert.areEqual(ns.var2, var2, "var2 is the same");

    assert.areEqual(ns.var1, var1, "var1 is the same");

    assert.areEqual(ns.foobar, foobar, "foobar is the same");

    assert.areEqual(ns.foo4, foo, "foo4 is the same");

    assert.areEqual(ns.baz2, baz, "baz2 is the same");

    assert.areEqual(ns.foo3, foo, "foo3 is the same");

    assert.areEqual(ns.bar2, bar, "bar2 is the same");

    assert.areEqual(ns.baz, baz, "baz is the same");

    assert.areEqual(ns.foo2, foo, "foo2 is the same");

    assert.areEqual(ns.foo, foo, "foo is the same");

    assert.areEqual(ns.bar, bar, "bar is the same");

    assert.areEqual(ns.const6, const6, "const6 is the same");

    assert.areEqual(ns.const5, const5, "const5 is the same");

    assert.areEqual(ns.const4, const4, "const4 is the same");

    assert.areEqual(ns.const3, const3, "const3 is the same");

    assert.areEqual(ns.const2, const2, "const2 is the same");

    assert.areEqual(ns.let7, let7, "let7 is the same");

    assert.areEqual(ns.let6, let6, "let6 is the same");

    assert.areEqual(ns.let5, let5, "let5 is the same");

    assert.areEqual(ns.let4, let4, "let4 is the same");

    assert.areEqual(ns.let3, let3, "let3 is the same");

    assert.areEqual(ns.let2, let2, "let2 is the same");

    assert.areEqual(ns.let1, let1, "let1 is the same");

    assert.areEqual(ns.cl2, cl2, "cl2 is the same");

    assert.areEqual(ns.cl1, cl1, "cl1 is the same");

    assert.areEqual(ns.gn2, gn2, "gn2 is the same");

    assert.areEqual(ns.gn1, gn1, "gn1 is the same");

    assert.areEqual(ns.fn2, fn2, "fn2 is the same");

    assert.areEqual(ns.fn1, fn1, "fn1 is the same");

}
changeContext=function changeContext()

{

    foo = 20;

    var1 = 'new string';

    var2 = 'changed';

    var tmp = fn1;

    fn1 = fn2;

    fn2 = fn1;

}
default=default
var7=undefined
var6=undefined
var5=undefined
var4=undefined
var3=5
var2=undefined
var1=string
foo4=function foo() { }
bar2=class bar { }
foobar=function foobar() { }
foo3=function foo() { }
baz2=function* baz() { }
foo2=function foo() { }
baz=function* baz() { }
bar=class bar { }
foo=function foo() { }
const6=
const5=[object Object]
const4=4
const3=3
const2=str
let7=
let6=[object Object]
let5=undefined
let4=undefined
let3=undefined
let2=2
let1=undefined
cl2=class cl2 { }
cl1=class cl1 { }
gn2=function* gn2() { }
gn1=function* gn1() { }
fn2=function fn2() { }
fn1=function fn1() { }
verifyNamespace = function verifyNamespace(ns)

{

    var unused = 1;

    for (var i in ns) helpers.writeln(i + " = " + ns[i]);

    assert.areEqual(ns.var7, var7, "var7 is the same");

    assert.areEqual(ns.var6, var6, "var6 is the same");

    assert.areEqual(ns.var5, var5, "var5 is the same");

    assert.areEqual(ns.var4, var4, "var4 is the same");

    assert.areEqual(ns.var3, var3, "var3 is the same");

    assert.areEqual(ns.var2, var2, "var2 is the same");

    assert.areEqual(ns.var1, var1, "var1 is the same");

    assert.areEqual(ns.foobar, foobar, "foobar is the same");

    assert.areEqual(ns.foo4, foo, "foo4 is the same");

    assert.areEqual(ns.baz2, baz, "baz2 is the same");

    assert.areEqual(ns.foo3, foo, "foo3 is the same");

    assert.areEqual(ns.bar2, bar, "bar2 is the same");

    assert.areEqual(ns.baz, baz, "baz is the same");

    assert.areEqual(ns.foo2, foo, "foo2 is the same");

    assert.areEqual(ns.foo, foo, "foo is the same");

    assert.areEqual(ns.bar, bar, "bar is the same");

    assert.areEqual(ns.const6, const6, "const6 is the same");

    assert.areEqual(ns.const5, const5, "const5 is the same");

    assert.areEqual(ns.const4, const4, "const4 is the same");

    assert.areEqual(ns.const3, const3, "const3 is the same");

    assert.areEqual(ns.const2, const2, "const2 is the same");

    assert.areEqual(ns.let7, let7, "let7 is the same");

    assert.areEqual(ns.let6, let6, "let6 is the same");

    assert.areEqual(ns.let5, let5, "let5 is the same");

    assert.areEqual(ns.let4, let4, "let4 is the same");

    assert.areEqual(ns.let3, let3, "let3 is the same");

    assert.areEqual(ns.let2, let2, "let2 is the same");

    assert.areEqual(ns.let1, let1, "let1 is the same");

    assert.areEqual(ns.cl2, cl2, "cl2 is the same");

    assert.areEqual(ns.cl1, cl1, "cl1 is the same");

    assert.areEqual(ns.gn2, gn2, "gn2 is the same");

    assert.areEqual(ns.gn1, gn1, "gn1 is the same");

    assert.areEqual(ns.fn2, fn2, "fn2 is the same");

    assert.areEqual(ns.fn1, fn1, "fn1 is the same");

}
changeContext = function changeContext()

{

    foo = 20;

    var1 = 'new string';

    var2 = 'changed';

    var tmp = fn1;

    fn1 = fn2;

    fn2 = fn1;

}
default = default
var7 = undefined
var6 = undefined
var5 = undefined
var4 = undefined
var3 = 5
var2 = undefined
var1 = string
foo4 = function foo() { }
bar2 = class bar { }
foobar = function foobar() { }
foo3 = function foo() { }
baz2 = function* baz() { }
foo2 = function foo() { }
baz = function* baz() { }
bar = class bar { }
foo = function foo() { }
const6 = 
const5 = [object Object]
const4 = 4
const3 = 3
const2 = str
let7 = 
let6 = [object Object]
let5 = undefined
let4 = undefined
let3 = undefined
let2 = 2
let1 = undefined
cl2 = class cl2 { }
cl1 = class cl1 { }
gn2 = function* gn2() { }
gn1 = function* gn1() { }
fn2 = function fn2() { }
fn1 = function fn1() { }
verifyNamespace = function verifyNamespace(ns)

{

    var unused = 1;

    for (var i in ns) helpers.writeln(i + " = " + ns[i]);

    assert.areEqual(ns.var7, var7, "var7 is the same");

    assert.areEqual(ns.var6, var6, "var6 is the same");

    assert.areEqual(ns.var5, var5, "var5 is the same");

    assert.areEqual(ns.var4, var4, "var4 is the same");

    assert.areEqual(ns.var3, var3, "var3 is the same");

    assert.areEqual(ns.var2, var2, "var2 is the same");

    assert.areEqual(ns.var1, var1, "var1 is the same");

    assert.areEqual(ns.foobar, foobar, "foobar is the same");

    assert.areEqual(ns.foo4, foo, "foo4 is the same");

    assert.areEqual(ns.baz2, baz, "baz2 is the same");

    assert.areEqual(ns.foo3, foo, "foo3 is the same");

    assert.areEqual(ns.bar2, bar, "bar2 is the same");

    assert.areEqual(ns.baz, baz, "baz is the same");

    assert.areEqual(ns.foo2, foo, "foo2 is the same");

    assert.areEqual(ns.foo, foo, "foo is the same");

    assert.areEqual(ns.bar, bar, "bar is the same");

    assert.areEqual(ns.const6, const6, "const6 is the same");

    assert.areEqual(ns.const5, const5, "const5 is the same");

    assert.areEqual(ns.const4, const4, "const4 is the same");

    assert.areEqual(ns.const3, const3, "const3 is the same");

    assert.areEqual(ns.const2, const2, "const2 is the same");

    assert.areEqual(ns.let7, let7, "let7 is the same");

    assert.areEqual(ns.let6, let6, "let6 is the same");

    assert.areEqual(ns.let5, let5, "let5 is the same");

    assert.areEqual(ns.let4, let4, "let4 is the same");

    assert.areEqual(ns.let3, let3, "let3 is the same");

    assert.areEqual(ns.let2, let2, "let2 is the same");

    assert.areEqual(ns.let1, let1, "let1 is the same");

    assert.areEqual(ns.cl2, cl2, "cl2 is the same");

    assert.areEqual(ns.cl1, cl1, "cl1 is the same");

    assert.areEqual(ns.gn2, gn2, "gn2 is the same");

    assert.areEqual(ns.gn1, gn1, "gn1 is the same");

    assert.areEqual(ns.fn2, fn2, "fn2 is the same");

    assert.areEqual(ns.fn1, fn1, "fn1 is the same");

}
changeContext = function changeContext()

{

    foo = 20;

    var1 = 'new string';

    var2 = 'changed';

    var tmp = fn1;

    fn1 = fn2;

    fn2 = fn1;

}
default = default
var7 = undefined
var6 = undefined
var5 = undefined
var4 = undefined
var3 = 5
var2 = changed
var1 = new string
foo4 = 20
bar2 = class bar { }
foobar = function foobar() { }
foo3 = 20
baz2 = function* baz() { }
foo2 = 20
baz = function* baz() { }
bar = class bar { }
foo = 20
const6 = 
const5 = [object Object]
const4 = 4
const3 = 3
const2 = str
let7 = 
let6 = [object Object]
let5 = undefined
let4 = undefined
let3 = undefined
let2 = 2
let1 = undefined
cl2 = class cl2 { }
cl1 = class cl1 { }
gn2 = function* gn2() { }
gn1 = function* gn1() { }
fn2 = function fn2() { }
fn1 = function fn2() { }
foo=function foo() { }
bar=class bar { }
baz=function* baz() { }
foo2=function foo() { }
bar2=class bar { }
foo3=function foo() { }
ModuleComplexReexports_foo=function bar() { return 'bar'; }
switch=undefined
bar2=function foo() { return 'foo'; }
localfoo2=function foo() { return 'foo'; }
bar=function foo() { return 'foo'; }
localfoo=function foo() { return 'foo'; }
baz=function foo() { return 'foo'; }
foo=function foo() { return 'foo'; }
