| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | 
							- 'use strict';
 
- module.exports = {
 
-   wrap: wrapRange,
 
-   limit: limitRange,
 
-   validate: validateRange,
 
-   test: testRange,
 
-   curry: curry,
 
-   name: name
 
- };
 
- function wrapRange(min, max, value) {
 
-   var maxLessMin = max - min;
 
-   return ((value - min) % maxLessMin + maxLessMin) % maxLessMin + min;
 
- }
 
- function limitRange(min, max, value) {
 
-   return Math.max(min, Math.min(max, value));
 
- }
 
- function validateRange(min, max, value, minExclusive, maxExclusive) {
 
-   if (!testRange(min, max, value, minExclusive, maxExclusive)) {
 
-     throw new Error(value + ' is outside of range [' + min + ',' + max + ')');
 
-   }
 
-   return value;
 
- }
 
- function testRange(min, max, value, minExclusive, maxExclusive) {
 
-   return !(
 
-        value < min ||
 
-        value > max ||
 
-        (maxExclusive && (value === max)) ||
 
-        (minExclusive && (value === min))
 
-   );
 
- }
 
- function name(min, max, minExcl, maxExcl) {
 
-   return (minExcl ? '(' : '[') + min + ',' + max + (maxExcl ? ')' : ']');
 
- }
 
- function curry(min, max, minExclusive, maxExclusive) {
 
-   var boundNameFn = name.bind(null, min, max, minExclusive, maxExclusive);
 
-   return {
 
-     wrap: wrapRange.bind(null, min, max),
 
-     limit: limitRange.bind(null, min, max),
 
-     validate: function(value) {
 
-       return validateRange(min, max, value, minExclusive, maxExclusive);
 
-     },
 
-     test: function(value) {
 
-       return testRange(min, max, value, minExclusive, maxExclusive);
 
-     },
 
-     toString: boundNameFn,
 
-     name: boundNameFn
 
-   };
 
- }
 
 
  |