private int setInitialContents(int axis, int[] dims, LispObject contents, int index) {

    if (dims.length == 0) {
      try {
        data[index] = coerceLispObjectToJavaByte(contents);
      } catch (ArrayIndexOutOfBoundsException e) {
        error(new LispError("Bad initial contents for array."));
        return -1;
      }
      ++index;
    } else {
      int dim = dims[0];
      if (dim != contents.length()) {
        error(new LispError("Bad initial contents for array."));
        return -1;
      }
      int[] newDims = new int[dims.length - 1];
      for (int i = 1; i < dims.length; i++) newDims[i - 1] = dims[i];
      if (contents.listp()) {
        for (int i = contents.length(); i-- > 0; ) {
          LispObject content = contents.car();
          index = setInitialContents(axis + 1, newDims, content, index);
          contents = contents.cdr();
        }
      } else {
        AbstractVector v = checkVector(contents);
        final int length = v.length();
        for (int i = 0; i < length; i++) {
          LispObject content = v.AREF(i);
          index = setInitialContents(axis + 1, newDims, content, index);
        }
      }
    }
    return index;
  }
 public void testAsFormatString() {
   String formatString = test.asFormatString();
   Vector vec = AbstractVector.decodeVector(formatString);
   assertEquals(vec, test);
 }
 public void testDecodeVector() throws Exception {
   Vector val = AbstractVector.decodeVector(test.asFormatString());
   for (int i = 0; i < test.size(); i++) {
     assertEquals("get [" + i + ']', test.get(i), val.get(i));
   }
 }