diff --git a/tests/tests-skeletons/check-PER-support.c b/tests/tests-skeletons/check-PER-support.c
index e2cc9a1..4a0d96f 100644
--- a/tests/tests-skeletons/check-PER-support.c
+++ b/tests/tests-skeletons/check-PER-support.c
@@ -61,8 +61,12 @@
     assert(recovered == length);
 }
 
-int main() {
-
+/*
+ * Checks that we can get the PER length that we have just put,
+ * and receive the same value.
+ */
+static void
+check_round_trips() {
     check_round_trip(0);
     check_round_trip(1);
     check_round_trip(127);
@@ -80,6 +84,192 @@
         check_round_trip(i*16384);
         check_round_trip(i*16384 + 1);
     }
+}
+
+#define OK_UNREBASE(w, l, u, c) check_unrebase(__LINE__, 0, w, l, u, c)
+#define NO_UNREBASE(w, l, u) check_unrebase(__LINE__, 1, w, l, u, 0)
+
+static void
+check_unrebase(int lineno, int expected_to_fail, unsigned long wire_value,
+               long lb, long ub, long control) {
+    fprintf(stderr, "%03d: Checking recovery of %lu (%ld..%ld)", lineno,
+            wire_value, lb, ub);
+    if(expected_to_fail) {
+        fprintf(stderr, " to FAIL\n");
+    } else {
+        fprintf(stderr, " into %ld\n", control);
+    }
+
+    long outcome;
+    int ret = per_long_range_unrebase(wire_value, lb, ub, &outcome);
+    if(ret == 0) {
+        assert(!expected_to_fail);
+    } else {
+        assert(expected_to_fail);
+        return;
+    }
+
+    assert(outcome == control);
+}
+
+
+#define OK_REBASE_ROUNDTRIP(v, l, u) \
+    check_range_rebase_round_trip(__LINE__, 0, v, l, u)
+
+#define NO_REBASE_ROUNDTRIP(v, l, u) \
+    check_range_rebase_round_trip(__LINE__, 1, v, l, u)
+
+static void
+check_range_rebase_round_trip(int lineno, int expected_to_fail, long value,
+                              long lb, long ub) {
+    unsigned long wire_value;
+    int ret;
+
+    fprintf(stderr, "%03d: Rebase %ld into (%ld..%ld) %s\n", lineno, value, lb,
+            ub, expected_to_fail ? "FAIL" : "OK");
+
+    ret = per_long_range_rebase(value, lb, ub, &wire_value);
+    if(ret != 0) {
+        if(expected_to_fail) {
+            return;
+        } else {
+            fprintf(stderr, "%03d: Original %ld (%ld..%ld) failed to rebase\n",
+                    lineno, value, lb, ub);
+            assert(ret == 0);
+        }
+    } if(expected_to_fail) {
+        fprintf(
+            stderr,
+            "%03d: Original %ld (%ld..%ld) rebased to %lu where it shouldn't\n",
+            lineno, value, lb, ub, wire_value);
+        assert(expected_to_fail && ret == -1);
+    }
+
+    fprintf(stderr, "%03d: Recover %lu into (%ld..%ld)\n", lineno,
+            wire_value, lb, ub);
+
+    long recovered;
+    ret = per_long_range_unrebase(wire_value, lb, ub, &recovered);
+    if(ret != 0) {
+        fprintf(stderr, "%03d: Wire value %lu (%ld..%ld) failed to unrebase\n",
+                lineno, wire_value, lb, ub);
+        assert(ret == 0);
+    }
+
+    if(value != recovered) {
+        fprintf(stderr,
+                "%03d: Value %ld (%ld..%ld) failed to round-trip (=%ld)\n",
+                lineno, value, lb, ub, recovered);
+        assert(value == recovered);
+    }
+
+}
+
+static void
+check_range_rebase() {
+
+    OK_UNREBASE(0U, 0, 0, 0);
+    NO_UNREBASE(1U, 0, 0);
+    OK_UNREBASE(0, LONG_MAX, LONG_MAX, LONG_MAX);
+    NO_UNREBASE(1, LONG_MAX, LONG_MAX);
+    OK_UNREBASE(0, LONG_MAX-1, LONG_MAX-1, LONG_MAX-1);
+    NO_UNREBASE(1, LONG_MAX-1, LONG_MAX-1);
+
+    OK_REBASE_ROUNDTRIP(0, 0, 0);
+    OK_REBASE_ROUNDTRIP(0, 0, 1);
+    OK_REBASE_ROUNDTRIP(1, 0, 1);
+
+    NO_REBASE_ROUNDTRIP(-1, 0, 0);
+    NO_REBASE_ROUNDTRIP(1, 0, 0);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, 0, 0);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, 0, 0);
+
+    OK_REBASE_ROUNDTRIP(-2, -2, -1);
+    OK_REBASE_ROUNDTRIP(-1, -2, -1);
+    NO_REBASE_ROUNDTRIP(-3, -2, -1);
+    NO_REBASE_ROUNDTRIP(0, -2, -1);
+
+    OK_REBASE_ROUNDTRIP(LONG_MAX, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(LONG_MAX-1, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(0, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MAX, LONG_MAX);
+
+    OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(LONG_MAX-1, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN, LONG_MIN);
+    OK_REBASE_ROUNDTRIP(LONG_MAX-10, LONG_MAX-10, LONG_MAX-5);
+    OK_REBASE_ROUNDTRIP(LONG_MAX-5, LONG_MAX-10, LONG_MAX-5);
+    OK_REBASE_ROUNDTRIP(LONG_MAX-7, LONG_MAX-10, LONG_MAX-5);
+    NO_REBASE_ROUNDTRIP(LONG_MAX-4, LONG_MAX-10, LONG_MAX-5);
+
+    NO_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN+1, LONG_MIN+2);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN+1, LONG_MIN+2);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+2, LONG_MIN+1, LONG_MIN+2);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+3, LONG_MIN+1, LONG_MIN+2);
+    OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MIN+1);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN, 0);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN, LONG_MIN+1);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+2, LONG_MIN, LONG_MIN+1);
+
+    OK_REBASE_ROUNDTRIP(-1, -1, 1);
+    OK_REBASE_ROUNDTRIP(0, -1, 1);
+    OK_REBASE_ROUNDTRIP(1, -1, 1);
+
+    NO_REBASE_ROUNDTRIP(-2, -1, 1);
+    NO_REBASE_ROUNDTRIP(2, -1, 1);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, -1, 1);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, -1, 1);
+
+    OK_REBASE_ROUNDTRIP(-1, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(1, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN, LONG_MAX);
+
+    if(sizeof(long) == 8) {
+        OK_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MAX);
+
+        /* Too wide range, not fit uint32_t */
+        OK_REBASE_ROUNDTRIP(INT32_MIN, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        OK_REBASE_ROUNDTRIP(INT32_MAX, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        OK_REBASE_ROUNDTRIP((long)INT32_MIN - 1, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        OK_REBASE_ROUNDTRIP((long)INT32_MAX + 1, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        NO_REBASE_ROUNDTRIP(LONG_MIN, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        NO_REBASE_ROUNDTRIP(LONG_MAX, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+
+        NO_REBASE_ROUNDTRIP(((long)INT32_MIN)-1, INT32_MIN, INT32_MAX);
+        NO_REBASE_ROUNDTRIP(((long)INT32_MAX)+1, INT32_MIN, INT32_MAX);
+        NO_REBASE_ROUNDTRIP(LONG_MIN, INT32_MIN, INT32_MAX);
+        NO_REBASE_ROUNDTRIP(LONG_MAX, INT32_MIN, INT32_MAX);
+    }
+
+    OK_REBASE_ROUNDTRIP(-1, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(0, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(-1, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(LONG_MIN + 1, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(LONG_MAX - 1, LONG_MIN + 1, LONG_MAX - 1);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN + 1, LONG_MAX - 1);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN + 1, LONG_MAX - 1);
+
+    if(sizeof(long) == 8) {
+        NO_REBASE_ROUNDTRIP(LONG_MIN, INT32_MIN + 1, INT32_MAX - 1);
+        NO_REBASE_ROUNDTRIP(LONG_MAX, INT32_MIN + 1, INT32_MAX - 1);
+    }
+}
+
+int main() {
+
+    check_range_rebase();
+    check_round_trips();
 
 }
 
