@SuppressWarnings({ "rawtypes", "unchecked" })
	protected int testCompareTo(Comparable o1, Comparable o2) {
		int res = 0;
		Map<String, Object> fields1 = getMineAndParentFields(
				ForCompareTo.class, o1);
		Map<String, Object> fields2 = getMineAndParentFields(
				ForCompareTo.class, o2);
		if (!isEmpty(fields1) && fields2.size() >= fields1.size()) {
			for (String key : fields1.keySet()) {
				Object v1 = fields1.get(key);
				Object v2 = fields2.get(key);
				if (v1 != null) {
					if (v2 != null) {
						if (v1 instanceof Comparable
								&& v2 instanceof Comparable) {
							res = ((Comparable) v1).compareTo((Comparable) v2);
						} else {
							throw new IllegalArgumentException(
									safeFormat(
											"both arguments must be Comparables: (%s vs. %s)",
											v1.getClass(), v2.getClass()));
						}
					} else {
						res = 1;
					}
				} else {
					if (v2 != null) {
						res = -1;
					} else {
						// res = 0;
					}
				}
				if (res != 0) {
					break;
				}
			}
		} else {
			res = o1.compareTo(o2);
		}
		return res;
	}