verify method

CubeStatus verify()

Verifies if the Cube has invalid facelet positions.

Implementation

CubeStatus verify() {
  final ec = List<int>.filled(Edge.count, 0);
  final cc = List<int>.filled(Corner.count, 0);

  for (var e = 0; e < Edge.count; e++) {
    ec[_ep[e].index]++;
  }

  for (var i = 0; i < Edge.count; i++) {
    // missing edges
    if (ec[i] != 1) {
      return CubeStatus.missingEdge;
    }
  }

  var sum = 0;

  for (var i = 0; i < Edge.count; i++) {
    sum += _eo[i];
  }

  if (sum % 2 != 0) {
    return CubeStatus.twistedEdge;
  }

  for (var c = 0; c < Corner.count; c++) {
    cc[_cp[c].index]++;
  }

  for (var i = 0; i < Corner.count; i++) {
    if (cc[i] != 1) {
      return CubeStatus.missingCorner;
    }
  }

  sum = 0;

  for (var i = 0; i < Corner.count; i++) {
    sum += _co[i];
  }

  if (sum % 3 != 0) {
    return CubeStatus.twistedCorner;
  }

  // parity error
  if ((computeEdgeParity() ^ computeCornerParity()) != 0) {
    return CubeStatus.parityError;
  }

  // cube ok
  return CubeStatus.ok;
}