proc main()
{
    var lscl = 16;
    var lvec = [16].reshape(4);
    var lmat = [16].reshape(4,4);
    var scl = 15;
    var vec = [0,7,15,15];
    var mat = [16,16,16,16].encode([511,1023,2047,4095]);

      "scl dec scl:\n", lscl.decode(scl), '\n';
    "\nvec dec scl:\n", lvec.decode(scl), '\n';
    "\nmat dec scl:\n", lmat.decode(scl), '\n';

    "\nscl dec vec:\n", lscl.decode(vec), '\n';
    "\nvec dec vec:\n", lvec.decode(vec), '\n';
    "\nmat dec vec:\n", lmat.decode(vec), '\n';

    "\nscl dec mat:\n", lscl.decode(mat), '\n';
    "\nvec dec mat:\n", lvec.decode(mat), '\n';
    "\nmat dec mat:\n", lmat.decode(mat), '\n';

    "\nexample 1 (3269):\n", 10 .decode([3,2,6,9]), '\n';
    "\nexample 2 (25):\n", 8 .decode([3,1]), '\n';
    "\nexample 3 (68):\n", [1760,3,12].decode([1,2,8]), '\n';
    "\nexample 4 (7):\n", [2,2,2].decode(1), '\n';
    "\nexample 5 (2667):\n", [0,20,12,4].decode([2,15,6,3]), '\n';
    "\nexample 6 (60 37 80):\n",
            [1760,3,12].decode([[1,1,1],[2,0,3],[0,1,8]]), '\n';
}