1//
2//  ANTLRBitSetTest.m
3//  ANTLR
4//
5//  Created by Ian Michell on 13/05/2010.
6//  Copyright 2010 Ian Michell and Alan Condit. All rights reserved.
7//
8
9#import "ANTLRBitSetTest.h"
10#import "ANTLRBitSet.h"
11#import <CoreFoundation/CoreFoundation.h>
12#import <CoreFoundation/CFBitVector.h>
13
14@implementation ANTLRBitSetTest
15
16-(void) testWithBitData
17{
18	static const unsigned long long bitData[] = {3LL, 1LL};
19	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSetWithBits:bitData Count:2];
20    CFIndex actual = (CFIndex)[bitSet numBits];
21    CFIndex expected = 3;
22
23    STAssertEquals(actual, expected, @"There should be three bits set in bitvector. But I have %d", actual);
24	[bitSet release];
25}
26
27-(void) testWithBitArray
28{
29	AMutableArray *bits = [AMutableArray arrayWithCapacity:10];
30	[bits addObject:[NSNumber numberWithBool:YES]];
31	[bits addObject:[NSNumber numberWithBool:YES]];
32	[bits addObject:[NSNumber numberWithBool:NO]];
33	[bits addObject:[NSNumber numberWithBool:YES]];
34	[bits addObject:[NSNumber numberWithBool:NO]];
35	[bits addObject:[NSNumber numberWithBool:YES]];
36	STAssertTrue([[bits objectAtIndex:0] boolValue], @"Value at index 0 was not true");
37	STAssertTrue([[bits objectAtIndex:1] boolValue], @"Value at index 1 was not true");
38	STAssertFalse([[bits objectAtIndex:2] boolValue], @"Value at index 2 was not false");
39	STAssertTrue([[bits objectAtIndex:3] boolValue], @"Value at index 3 was not true");
40	STAssertFalse([[bits objectAtIndex:4] boolValue], @"Value at index 4 was not false");
41	STAssertTrue([[bits objectAtIndex:5] boolValue], @"Value at index 5 was not true");
42	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSetWithArray:bits];
43	CFIndex actual = (CFIndex)[bitSet numBits];
44	CFIndex expected = 4;
45	STAssertEquals(actual, expected, @"There should be four bits set in bitvector. But I have %d", actual);
46	[bitSet release];
47}
48
49-(void) testAdd
50{
51
52	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSet];
53	[bitSet add:1];
54	[bitSet add:2];
55	[bitSet add:3];
56	CFIndex actual = (CFIndex)[bitSet numBits];
57	CFIndex expected = 3;
58	STAssertEquals(actual, expected, @"There should be three bits set in bitvector. But I have %d", actual);
59	[bitSet release];
60}
61
62-(void) testRemove
63{
64	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSet];
65	[bitSet add:1];
66	CFIndex actual = (CFIndex)[bitSet numBits];
67	CFIndex expected = 1;
68	STAssertTrue(actual == expected, @"Bitset was not of size 1");
69	STAssertTrue([bitSet member:1], @"Bit at index 1 is not a member...");
70	[bitSet remove:1];
71	actual = [bitSet numBits];
72	STAssertTrue(actual == 0, @"Bitset was not empty");
73	STAssertFalse([bitSet member:1], @"Bit at index 1 is a member...");
74	STAssertTrue([bitSet isNil], @"There was at least one bit on...");
75}
76
77-(void) testCopyBitSet
78{
79	static const unsigned long long bitData[] = {3LL, 1LL};
80	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSetWithBits:bitData Count:2];
81	ANTLRBitSet *copy = [bitSet mutableCopyWithZone:nil];
82	CFIndex actual = (CFIndex)[copy numBits];
83	STAssertEquals(actual, (CFIndex)[bitSet numBits], @"There should be three bits set in bitvector. But I have %d", [copy numBits]);
84	[bitSet release];
85}
86
87-(void) testOr
88{
89	static const unsigned long long bitData[] = {3LL, 1LL};
90	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSetWithBits:bitData Count:2];
91
92	static const unsigned long long otherData[] = {5LL, 3LL, 1LL};
93	ANTLRBitSet *otherBitSet = [ANTLRBitSet newANTLRBitSetWithBits:otherData Count:3];
94
95	ANTLRBitSet *c = [bitSet or:otherBitSet];
96	STAssertTrue([c size] == [otherBitSet size], @"c should be the same as otherBitSet");
97}
98
99-(void) testDescription
100{
101	ANTLRBitSet *bitSet = [ANTLRBitSet newANTLRBitSet];
102	[bitSet add:1];
103	[bitSet add:2];
104	NSMutableString *aDescription = (NSMutableString *)[bitSet description];
105	STAssertTrue([aDescription isEqualToString:@"{1,2}"], @"Description was not right, expected '{1,2}' got: %@", aDescription);
106}
107
108@end
109