proc main()
{
var a = ['a':'z'].reshape(2,3,4);
var b = ['A':'Z'].reshape(2,3,4);
var c34 = ['A':'Z'].reshape(3,4);
var c24 = ['A':'Z'].reshape(2,4);
var c23 = ['A':'Z'].reshape(2,3);
"Array lamination\n";
"a.laminate(b):\n", a.laminate(b), '\n';
"a.laminate(b,0):\n", a.laminate(b,0), '\n';
"a.laminate(b,1):\n", a.laminate(b,1), '\n';
"a.laminate(b,2):\n", a.laminate(b,2), '\n';
"a.laminate(b,-0.5):\n", a.laminate(b,-0.5), '\n';
"a.laminate(b,0.5):\n", a.laminate(b,0.5), '\n';
"a.laminate(b,1.5):\n", a.laminate(b,1.5), '\n';
"a.laminate(b,2.5):\n", a.laminate(b,2.5), '\n';
"\nSubarray lamination\n";
"a.laminate(c34,0):\n", a.laminate(c34,0), '\n';
"a.laminate(c24,1):\n", a.laminate(c24,1), '\n';
"a.laminate(c23,2):\n", a.laminate(c23,2), '\n';
"c34.laminate(a,0):\n", c34.laminate(a,0), '\n';
"c24.laminate(a,1):\n", c24.laminate(a,1), '\n';
"c23.laminate(a,2):\n", c23.laminate(a,2), '\n';
"\nScalar left lamination\n";
"'*'.laminate(b):\n", '*'.laminate(b), '\n';
"'*'.laminate(b,0):\n", '*'.laminate(b,0), '\n';
"'*'.laminate(b,1):\n", '*'.laminate(b,1), '\n';
"'*'.laminate(b,2):\n", '*'.laminate(b,2), '\n';
"'*'.laminate(b,-0.5):\n", '*'.laminate(b,-0.5), '\n';
"'*'.laminate(b,0.5):\n", '*'.laminate(b,0.5), '\n';
"'*'.laminate(b,1.5):\n", '*'.laminate(b,1.5), '\n';
"'*'.laminate(b,2.5):\n", '*'.laminate(b,2.5), '\n';
"\nScalar right lamination\n";
"a.laminate('*'):\n", a.laminate('*'), '\n';
"a.laminate('*',0):\n", a.laminate('*',0), '\n';
"a.laminate('*',1):\n", a.laminate('*',1), '\n';
"a.laminate('*',2):\n", a.laminate('*',2), '\n';
"a.laminate('*',-0.5):\n", a.laminate('*',-0.5), '\n';
"a.laminate('*',0.5):\n", a.laminate('*',0.5), '\n';
"a.laminate('*',1.5):\n", a.laminate('*',1.5), '\n';
"a.laminate('*',2.5):\n", a.laminate('*',2.5), '\n';
}