Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ public IntegerSet readIntegerSet(int length) {
if (newReadIndex > writeIndex) {
throw new DecodingException("Bit string access out of range");
}
IntegerSet out = new IntegerSet(bitSet, readIndex, newReadIndex, 1);
IntegerSet out = new IntegerSet(bitSet, readIndex, newReadIndex);
readIndex = newReadIndex;
return out;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,19 @@ public final class IntegerSet extends AbstractSet<Integer> implements Dirtyable
private final BitSet bitSet;
private final int from;
private final int to;
private final int adjustment;

public IntegerSet(BitSet bitSet, int from, int to, int adjustment) {
public IntegerSet(BitSet bitSet, int from, int to) {
this.bitSet = bitSet;
this.from = from;
this.to = to;
this.adjustment = adjustment;
}

public IntegerSet(int limit) {
this(new BitSet(limit), 0, limit, 0);
this(new BitSet(limit), 0, limit);
}

public IntegerSet() {
this(new BitSet(), 0, MAX_COLLECTION_SIZE, 0);
this(new BitSet(), 0, MAX_COLLECTION_SIZE);
}

@Override
Expand All @@ -54,7 +52,7 @@ public int size() {
}

private int getOffset(int value) {
int offset = from - adjustment + value;
int offset = from - 1 + value;
if (offset < from) {
throw new IndexOutOfBoundsException("Negative index provided");
}
Expand All @@ -73,7 +71,7 @@ public boolean isEmpty() {
}

public boolean containsInt(int value) {
if (value < adjustment) {
if (value < 1) {
return false;
}
int offset = getOffset(value);
Expand Down Expand Up @@ -102,7 +100,7 @@ public int nextInt() {
}
int next = cursor;
cursor = bitSet.nextSetBit(cursor + 1);
return next - from + adjustment;
return next - from + 1;
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ private FixedBitfieldEncoder() {}

public static void encode(BitString builder, IntegerSet value, int bitStringLength) {
for (int i = 0; i < bitStringLength; i++) {
builder.writeBoolean(value.containsInt(i));
builder.writeBoolean(value.containsInt(i + 1));
}
}
}
36 changes: 15 additions & 21 deletions iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() {
gppModel.setFieldValue(
TcfCaV1.NAME,
TcfCaV1Field.PURPOSES_EXPRESS_CONSENT,
Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17));
Arrays.asList(1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17));
gppModel.setFieldValue(
TcfCaV1.NAME,
TcfCaV1Field.PURPOSES_IMPLIED_CONSENT,
Expand All @@ -374,15 +374,14 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() {
gppModel.setFieldValue(
TcfCaV1.NAME,
TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT,
Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20));
Arrays.asList(1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20));
gppModel.setFieldValue(
TcfCaV1.NAME,
TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT,
Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23));
gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3);
gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, List.of(1));
gppModel.setFieldValue(
TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, List.of(0, 2));
gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, List.of(2));

gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime);
gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime);
Expand All @@ -397,7 +396,7 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() {

String gppString = gppModel.encode();
Assertions.assertEquals(
"DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN",
"DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAyACAENGdCg_fA_AA_A_ABgABABAAABAB4AACACAAA.eOOOBxxxwcQ~1YNN",
gppString);

Assertions.assertEquals(4, gppString.split("~").length);
Expand Down Expand Up @@ -824,26 +823,21 @@ public void testDecode9() {
public void testConsistency() {
GppModel fromObjectModel = new GppModel();

fromObjectModel.setFieldValue(
TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
fromObjectModel.setFieldValue(
TcfEuV2.NAME,
TcfEuV2Field.VENDOR_CONSENTS,
Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238));

Assertions.assertEquals(
fromObjectModel.getSection(TcfEuV2.NAME).encode(),
fromObjectModel.getSection(TcfEuV2.NAME).encode());
Assertions.assertEquals(fromObjectModel.encode(), fromObjectModel.encode());
Set<Integer> purposeConsents = Set.of(1, 2, 23, 24);
fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, purposeConsents);
Set<Integer> vendorConsents = Set.of(32, 128, 81, 210, 755, 21, 173, 238);
fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, vendorConsents);

GppModel decodedModel = new GppModel(fromObjectModel.encode());
String encoded = fromObjectModel.encode();
GppModel decodedModel = new GppModel(encoded);

Assertions.assertEquals(
Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS));
purposeConsents, decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS));
Assertions.assertEquals(
Set.of(21, 32, 81, 128, 173, 210, 238, 755),
decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS));
vendorConsents, decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS));

decodedModel.setDirty(true);
Assertions.assertEquals(encoded, decodedModel.encode());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,13 @@ public class FixedBitfieldEncoderTest {
public void testEncode1() {
BitString builder = new BitString();
IntegerSet set = new IntegerSet();
FixedBitfieldEncoder.encode(builder, set, 2);
Assertions.assertEquals("00", builder.toString());
set.add(2);
set.add(4);
set.add(6);
FixedBitfieldEncoder.encode(builder, set, 6);
String encoded = builder.toString();
Assertions.assertEquals("010101", encoded);
Assertions.assertEquals(set, decode(encoded));
}

@Test
Expand All @@ -29,7 +34,7 @@ public void testEncode2() {
public void testEncode3() {
BitString builder = new BitString();
IntegerSet set = new IntegerSet();
set.add(0);
set.add(1);
FixedBitfieldEncoder.encode(builder, set, 1);
Assertions.assertEquals("1", builder.toString());
}
Expand All @@ -48,42 +53,42 @@ public void testEncode5() {
IntegerSet set = new IntegerSet();
set.addInt(1);
FixedBitfieldEncoder.encode(builder, set, 2);
Assertions.assertEquals("01", builder.toString());
Assertions.assertEquals("10", builder.toString());
}

@Test
public void testEncode6() {
BitString builder = new BitString();
IntegerSet set = new IntegerSet();
set.addInt(0);
set.addInt(2);
FixedBitfieldEncoder.encode(builder, set, 2);
Assertions.assertEquals("10", builder.toString());
Assertions.assertEquals("01", builder.toString());
}

@Test
public void testEncode7() {
BitString builder = new BitString();
IntegerSet set = new IntegerSet();
set.addInt(0);
set.addInt(1);
set.addInt(2);
FixedBitfieldEncoder.encode(builder, set, 2);
Assertions.assertEquals("11", builder.toString());
}

@Test
public void testEncode8() {
IntegerSet set = new IntegerSet(5);
for (int i = 0; i <= 10; i++) {
for (int i = 1; i <= 10; i++) {
set.addInt(i);
}
Assertions.assertEquals(Set.of(0, 1, 2, 3, 4), set);
Assertions.assertEquals(Set.of(1, 2, 3, 4, 5), set);
}

@Test
public void testEncode9() {
IntegerSet set = new IntegerSet(5);
set.addRange(0, 10);
Assertions.assertEquals(Set.of(0, 1, 2, 3, 4), set);
set.addRange(1, 10);
Assertions.assertEquals(Set.of(1, 2, 3, 4, 5), set);
}

private IntegerSet decode(String str) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,29 @@ void test() {
IntegerSet set = new IntegerSet(5);
assertFalse(set.isDirty());
assertTrue(set.isEmpty());
set.add(0);
set.add(1);
set.add(2);
set.add(3);
assertEquals(Set.of(0, 2, 3), set);
assertEquals(Set.of(1, 2, 3), set);
assertTrue(set.isDirty());
assertFalse(set.isEmpty());
assertEquals(3, set.size());
assertFalse(set.remove(1));
assertFalse(set.remove(4));
assertTrue(set.remove(2));
assertEquals(2, set.size());
set.addAll(List.of(3, 4));
assertEquals(Set.of(0, 3, 4), set);
assertEquals(Set.of(1, 3, 4), set);
List<Integer> out = new ArrayList<>();
Iterator<Integer> it = set.iterator();
it.forEachRemaining(out::add);
assertEquals(List.of(0, 3, 4), out);
assertEquals(List.of(1, 3, 4), out);
assertFalse(set.contains(2));
assertTrue(set.contains(3));
assertTrue(set.isDirty());
set.setDirty(false);
assertFalse(set.isDirty());
set.retainAll(Set.of(1, 2, 3));
assertEquals(Set.of(3), set);
assertEquals(Set.of(1, 3), set);
assertTrue(set.addAll(List.of(1, 3, 4)));
assertFalse(set.addAll(List.of(1, 3, 4)));
assertTrue(set.removeAll(List.of(3, 4)));
Expand All @@ -59,7 +59,7 @@ void boundsTest() {
bitSet.set(12);
bitSet.set(13);

IntegerSet set = new IntegerSet(bitSet, 10, 13, 1);
IntegerSet set = new IntegerSet(bitSet, 10, 13);
assertEquals(Set.of(1, 2, 3), set);

assertThrows(IndexOutOfBoundsException.class, () -> set.add(0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,21 @@ public void testEncode2() {
TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11));
tcfCaV1.setFieldValue(
TcfCaV1Field.PURPOSES_EXPRESS_CONSENT,
Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17));
Arrays.asList(1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17));
tcfCaV1.setFieldValue(
TcfCaV1Field.PURPOSES_IMPLIED_CONSENT,
Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23));
tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48));
tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30));
tcfCaV1.setFieldValue(
TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT,
Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20));
Arrays.asList(1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20));
tcfCaV1.setFieldValue(
TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT,
Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23));
tcfCaV1.setFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3);
tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Set.of(1));
tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0, 2));
tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(2));

tcfCaV1.setFieldValue(
TcfCaV1Field.CREATED,
Expand All @@ -66,7 +66,7 @@ public void testEncode2() {
ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant());

Assertions.assertEquals(
"BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode());
"BPSG_8APSG_8AAyACAENGdCg_fA_AA_A_ABgABABAAABAB4AACACAAA.eOOOBxxxwcQ", tcfCaV1.encode());
}

@Test
Expand Down
Loading