+ # reversed
+ [ 'x-q' => undef],
+ ['xxx-qqq' => undef],
+ ['xxx-q' => undef],
+ ['qqq-qc' => undef],
+
+ # non-alphabetic offset
+ [ '.-' => ''],
+ ['...-' => '(?:[a-z]|[^a-z][a-z])'],
+ [ '.q-' => '(?:[a-z]|[^a-z][q-z])'],
+ [ '.q-.' => '[^a-z][q-z]'],
+ # limit
+ ['.q.-q' => '(?:[a-q]|[^a-z][q-z])'],
+ ['..z-q' => '(?:[a-q]|[^a-z][a-z]|[^a-z][^a-z][z-z])'],
+ ['.q.-z' => '(?:[a-z]|[^a-z][q-z])'],
+ ['.q.-zz' => '(?:[a-y]|[^a-z][q-z]|' . 'z(?![z-z])|zz)'],
+ ['.q..-zz' => '(?:[a-y]|[^a-z][r-z]|[^a-z]q' . '[a-z]|z(?![z-z])|zz)'],
+ # non-alpha limit
+ ['.q.-z.' => '(?:[a-y]|[^a-z][q-z]|' . 'z(?![a-z]))'],
+ [ '..-.' => '(?:[^a-z](?![a-z]))'],
+ [ '.-.' => '(?![a-z])'],
+ [ '-.' => '(?![a-z])'],
+ [ '-...' => '(?![a-z])(?!.[a-z])(?!..[a-z])'],
+ [ '-q.' => '(?:(?![q-z])|q(?![a-z]))'],
+ [ '-q..' => '(?:(?![q-z])|q(?![a-z])(?!.[a-z]))'],
+# [ '..-...' => '(?:[^a-z](?![a-z])|[^a-z][^a-z](?![a-z]))'],
+# [ '.-...' => '[^a-z][^a-z](?![a-z])'],
+ #
+ [ 'a-.' => undef],
+);
+
+for (@RANGETESTS) {