/// <inheritdoc/> public virtual bool TryInit(IReadOnlyPuzzle puzzle, BitVector uniquePossibleValues) { int numDimensions = GetNumDimensions(puzzle); if (numDimensions != _dimensions?.Length) { _dimensions = new BitVector[numDimensions]; _remainingCountOnDimension = new int[numDimensions][]; } int maxValue = uniquePossibleValues.ComputeLastSetBit(); Span <int> requiredCounts = stackalloc int[maxValue + 1]; requiredCounts.Clear(); foreach ((int value, int count) in puzzle.CountPerUniqueValue) { requiredCounts[value] = count; } for (int d = 0; d < numDimensions; ++d) { _remainingCountOnDimension ![d] = requiredCounts.ToArray();
public void ComputeLastSetBit_IsCorrect(uint data, int lastBit) { var vector = new BitVector(data); Assert.Equal(lastBit, vector.ComputeLastSetBit()); }