// Test array type decorations class foo { public var v : Array[2,3]; } var g : Array[2,3]; foo oFoo {} proc ack(o : Array[2,3]) { "", o, '\n'; } proc check(e, num) { if (e == oadl::TypeCheck) "TypeCheck #", num, '\n'; } proc main() { var x : Array[2,3]; var y : Array[*]; var arr = {"A0", "A1", "A2", "B0", "B1", "B2"}.reshape(2,3); var bad = arr.reshape(1,3); // Test OK assignments x = arr; g = arr; ack(arr); oFoo.v = arr; y = arr; y = bad; oadl::typecheck(Array[2,3], x); oadl::typecheck(Array[*], x); oadl::typecheck(Array[*], y); // Test bad assignments try { x = bad; } catch(e) { check(e, 1); } try { g = bad; } catch(e) { check(e, 2); } try { ack(bad); } catch(e) { check(e, 3); } try { oFoo.v = bad; } catch(e) { check(e, 4); } try { oadl::typecheck(Array[1,3], x); } catch(e) { check(e, 5); } try { y = 3; } catch(e) { check(e, 6); } }