progress or bug? I am very confused

This commit is contained in:
rusefillc 2024-11-09 10:47:13 -05:00
parent 2dfff3a3e9
commit 416c11423c
3 changed files with 20 additions and 9 deletions

View File

@ -149,8 +149,18 @@ public class DbcField {
public boolean coversByte(int byteIndex) {
int startBit = byteIndex * 8;
if (isBigEndian && /* byte endianess less important for one byte fields */ length > 8)
startBit += 8;
if (isBigEndian) {
if (!DbcFile.compatibilityWithBrokenRusEfiLogic) {
startBit = DbcField.crazyMotorolaMath(startBit, length, true);
} else {
if (/* byte endianess less important for one byte fields */ length > 8) {
startBit += 8;
}
}
}
if (startOffset > startBit)
return false;
return startOffset + length >= startBit + 8;

View File

@ -10,12 +10,13 @@ public class DbcFieldTest {
@Test
public void testBigEndian() {
{
// todo: sorry I do not trust this test :(
compatibilityWithBrokenRusEfiLogic = false;
DbcField field = create(true);
assertFalse(field.coversByte(0));
assertFalse(field.coversByte(1));
assertFalse(field.coversByte(2));
assertTrue(field.coversByte(3));
assertFalse(field.coversByte(0));
assertFalse(field.coversByte(3));
}
{
compatibilityWithBrokenRusEfiLogic = true;
@ -28,7 +29,11 @@ public class DbcFieldTest {
}
private static DbcField create(boolean isBigEndian) {
return new DbcField("", 8, 16, 1, 0, null, isBigEndian);
int startBit = 8;
int length = 16;
startBit = DbcField.crazyMotorolaMath(startBit, length, isBigEndian);
return new DbcField("", startBit, length, 1, 0, null, isBigEndian);
}
@Test

View File

@ -123,7 +123,6 @@ public class ParseDBCTest {
DbcFile dbc = new DbcFile(false);
DbcFile.compatibilityWithBrokenRusEfiLogic = false;
dbc.read(reader);
assertEquals(dbc.packets.size(), 1);
@ -136,14 +135,11 @@ public class ParseDBCTest {
@Test
public void crazyMotorola() {
DbcFile.compatibilityWithBrokenRusEfiLogic = false;
assertEquals(24, DbcField.crazyMotorolaMath(27, 4, true));
assertEquals(24, DbcField.crazyMotorolaMath(30, 7, true));
assertEquals(24, DbcField.crazyMotorolaMath(31, 8, true));
assertEquals(24, DbcField.crazyMotorolaMath(17, 10, true));
assertEquals(24, DbcField.crazyMotorolaMath(17, 10, true));
}
}