// 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); }
}