diff -r 955d3add9426 -r 4b3436c03726 validate.go --- a/validate.go Sun Oct 16 10:08:11 2016 +0200 +++ b/validate.go Sun Oct 16 11:52:01 2016 +0200 @@ -1,10 +1,6 @@ package takuzu -import ( - "fmt" - - "github.com/pkg/errors" -) +// This file contains the takuzu validation functions and methods. // checkRange returns true if the range is completely defined, and an error // if it doesn't follow the rules for a takuzu line or column @@ -31,7 +27,11 @@ if c.Value == prevCell.Value { prevCellCount++ if prevCellCount > 2 { - return full, errors.Errorf("3+ same values %d", c.Value) + v := c.Value + return full, validationError{ + ErrorType: ErrorTooManyAdjacentValues, + CellValue: &v, + } } } else { prevCellCount = 1 @@ -41,10 +41,18 @@ prevCell = c } if counters[0] > size/2 { - return full, errors.Errorf("too many zeroes") + v := 0 + return full, validationError{ + ErrorType: ErrorTooManyValues, + CellValue: &v, + } } if counters[1] > size/2 { - return full, errors.Errorf("too many ones") + v := 1 + return full, validationError{ + ErrorType: ErrorTooManyValues, + CellValue: &v, + } } return full, nil } @@ -101,12 +109,18 @@ d = b.GetLine(i) full, err = checkRange(d) if err != nil { - return false, errors.Wrapf(err, "line %d", i) + err := err.(validationError) + err.LineNumber = &i + return false, err } if full { hv := computeVal(d) if lineVals[hv] { - return false, fmt.Errorf("duplicate lines (%d)", i) + err := validationError{ + ErrorType: ErrorDuplicate, + LineNumber: &i, + } + return false, err } lineVals[hv] = true } else { @@ -117,12 +131,18 @@ d = b.GetColumn(i) full, err = checkRange(d) if err != nil { - return false, errors.Wrapf(err, "column %d", i) + err := err.(validationError) + err.ColumnNumber = &i + return false, err } if full { hv := computeVal(d) if colVals[hv] { - return false, fmt.Errorf("duplicate columns (%d)", i) + err := validationError{ + ErrorType: ErrorDuplicate, + ColumnNumber: &i, + } + return false, err } colVals[hv] = true } else {