test(val, path, obj) {
    const types = this.getTypes();
    const operators = this.getRuleOperators();
    let ret = this.testOneRule(val, types[0], path, obj);

    for (let i = 1; i < types.length; i += 1) {
      const operator = operators[i] || operators[i - 1];
      ret = operator(ret, this.testOneRule(val, types[i], path, obj));
    }
    return ret;
  }
@param {any} val the value to be tested
@param {Object|String} obj the error object or string thats showed on error
@param {String} path the path to the tested value this is used when
using validator to keep track of the prop value ex: obj.min

@return {boolean}