code: function RangeSpec(low, high, size) {
    var s = size === undefined ? Number.POSITIVE_INFINITY : size;
    var l = low === undefined ? Number.NEGATIVE_INFINITY : low;
    var h = high === undefined ? Math.min(Number.POSITIVE_INFINITY, s-1) : high;
  
    if (typeof(l) !== 'number' ||
      typeof(h) !== 'number' ||
      typeof(s) !== 'number' ||
      !(l <= h) || !(h < s) && h !== Number.POSITIVE_INFINITY ||
      l < 0 && l !== Number.NEGATIVE_INFINITY) {
      throw new Error('Invalid range');
    }
  
    this._range = [low, high];
  }
docs: Range spec class according to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16
  and http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35
  
  @param {Number|undefined} low
  @param {Number|undefined} high
  @param {Number|undefined} [size] For validation only
  @constructor