blob: 1c7338e66e13ae5769f8d87057c179a8e5f933b9 [file] [log] [blame] [edit]
/*
* Copyright 2012 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "ZXBitMatrixTestCase.h"
@implementation ZXBitMatrixTestCase
- (void)testGetSet {
ZXBitMatrix *matrix = [[ZXBitMatrix alloc] initWithDimension:33];
STAssertEquals(matrix.height, 33, @"Expected matrix height to be 33");
for (int y = 0; y < 33; y++) {
for (int x = 0; x < 33; x++) {
if ((y * x % 3) == 0) {
[matrix setX:x y:y];
}
}
}
for (int y = 0; y < 33; y++) {
for (int x = 0; x < 33; x++) {
STAssertEquals([matrix getX:x y:y], (BOOL)(y * x % 3 == 0), @"Expected matrix (%d,%d) to equal %d", x, y, y * x % 3 == 0);
}
}
}
- (void)testSetRegion {
ZXBitMatrix *matrix = [[ZXBitMatrix alloc] initWithDimension:5];
[matrix setRegionAtLeft:1 top:1 width:3 height:3];
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
BOOL expected = y >= 1 && y <= 3 && x >= 1 && x <= 3;
STAssertEquals([matrix getX:x y:y], expected, @"Expected (%d,%d) to be %d", x, y, expected);
}
}
}
- (void)testRectangularMatrix {
ZXBitMatrix *matrix = [[ZXBitMatrix alloc] initWithWidth:75 height:20];
STAssertEquals(matrix.width, 75, @"Expected matrix.width to be 75");
STAssertEquals(matrix.height, 20, @"Expected matrix.height to be 20");
[matrix setX:10 y:0];
[matrix setX:11 y:1];
[matrix setX:50 y:2];
[matrix setX:51 y:3];
[matrix flipX:74 y:4];
[matrix flipX:0 y:5];
// Should all be on
STAssertTrue([matrix getX:10 y:0], @"Expected (10,0) to be on");
STAssertTrue([matrix getX:11 y:1], @"Expected (11,1) to be on");
STAssertTrue([matrix getX:50 y:2], @"Expected (50,2) to be on");
STAssertTrue([matrix getX:51 y:3], @"Expected (51,3) to be on");
STAssertTrue([matrix getX:74 y:4], @"Expected (74,4) to be on");
STAssertTrue([matrix getX:0 y:5], @"Expected (0,5) to be on");
// Flip a couple back off
[matrix flipX:50 y:2];
[matrix flipX:51 y:3];
STAssertFalse([matrix getX:50 y:2], @"Expected (50,2) to be off");
STAssertFalse([matrix getX:51 y:3], @"Expected (51,3) to be off");
}
- (void)testRectangularSetRegion {
ZXBitMatrix *matrix = [[ZXBitMatrix alloc] initWithWidth:320 height:240];
STAssertEquals(matrix.width, 320, @"Expected matrix.width to be 320");
STAssertEquals(matrix.height, 240, @"Expected matrix.height to be 240");
[matrix setRegionAtLeft:105 top:22 width:80 height:12];
// Only bits in the region should be on
for (int y = 0; y < 240; y++) {
for (int x = 0; x < 320; x++) {
BOOL expected = y >= 22 && y < 34 && x >= 105 && x < 185;
STAssertEquals([matrix getX:x y:y], expected, @"Expected matrix (%d,%d) to equal %d", x, y, expected);
}
}
}
- (void)testGetRow {
ZXBitMatrix *matrix = [[ZXBitMatrix alloc] initWithWidth:102 height:5];
for (int x = 0; x < 102; x++) {
if ((x & 0x03) == 0) {
[matrix setX:x y:2];
}
}
// Should allocate
ZXBitArray *array = [matrix rowAtY:2 row:nil];
STAssertEquals(array.size, 102, @"Expected array.size to equal 102");
// Should reallocate
ZXBitArray *array2 = [[ZXBitArray alloc] initWithSize:60];
array2 = [matrix rowAtY:2 row:array2];
STAssertEquals(array2.size, 102, @"Expected array2.size to equal 102");
// Should use provided object, with original BitArray size
ZXBitArray *array3 = [[ZXBitArray alloc] initWithSize:200];
array3 = [matrix rowAtY:2 row:array3];
STAssertEquals(array3.size, 200, @"Expected array3.size to equal 200");
for (int x = 0; x < 102; x++) {
BOOL on = (x & 0x03) == 0;
STAssertEquals([array get:x], on, @"Expected [array get:%d] to be %d", x, on);
STAssertEquals([array2 get:x], on, @"Expected [array2 get:%d] to be %d", x, on);
STAssertEquals([array3 get:x], on, @"Expected [array3 get:%d] to be %d", x, on);
}
}
@end