SD card log fields list should be auto-generated #3985

Not good
This commit is contained in:
rusefillc 2022-10-12 19:28:51 -04:00
parent b29da1f253
commit 4aaa56436c
1 changed files with 51 additions and 32 deletions

View File

@ -11,6 +11,17 @@ import org.junit.Test;
public class SdCardFieldsGeneratorTest {
@Test
public void outputs() {
Actor actor = new Actor() {
@Override
public void act(ReaderState state) {
state.variableRegistry.register("PACK_MULT_PERCENT", 100);
state.variableRegistry.register("GAUGE_NAME_RPM", "\"hello\"");
state.variableRegistry.register("GAUGE_NAME_GEAR_RATIO", "ra");
state.variableRegistry.register("GAUGE_NAME_CPU_TEMP", "te");
}
};
String test = "struct_no_prefix output_channels_s\n" +
"\tfloat autoscale internalMcuTemperature\n" +
"uint16_t autoscale RPMValue;@@GAUGE_NAME_RPM@@;\"RPM\",1, 0, 0, 8000, 2\n" +
@ -20,51 +31,59 @@ public class SdCardFieldsGeneratorTest {
"\tuint16_t autoscale speedToRpmRatio;@@GAUGE_NAME_GEAR_RATIO@@;\"value\",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0\n" +
"end_struct";
ReaderState state = new ReaderState();
state.variableRegistry.register("PACK_MULT_PERCENT", 100);
state.variableRegistry.register("GAUGE_NAME_RPM", "\"hello\"");
state.variableRegistry.register("GAUGE_NAME_GEAR_RATIO", "ra");
state.variableRegistry.register("GAUGE_NAME_CPU_TEMP", "te");
SdCardFieldsConsumer consumer = new SdCardFieldsConsumer(LazyFile.TEST);
state.readBufferedReader(test, consumer);
assertEquals(
"\t{engine->outputChannels.internalMcuTemperature, \"internalMcuTemperature\", \"\", 0},\n" +
"\t{engine->outputChannels.RPMValue, \"hello\", \"RPM\", 2},\n" +
"\t{engine->outputChannels.rpmAcceleration, \"dRPM\", \"RPM/s\", 2},\n" +
"\t{engine->outputChannels.speedToRpmRatio, \"ra\", \"value\", 0},\n" +
""
, consumer.getBody());
processAndAssert(test, "\t{engine->outputChannels.internalMcuTemperature, \"internalMcuTemperature\", \"\", 0},\n" +
"\t{engine->outputChannels.RPMValue, \"hello\", \"RPM\", 2},\n" +
"\t{engine->outputChannels.rpmAcceleration, \"dRPM\", \"RPM/s\", 2},\n" +
"\t{engine->outputChannels.speedToRpmRatio, \"ra\", \"value\", 0},\n" +
"", actor);
}
@Test
public void bitAndAlignment() {
String test = "struct_no_prefix output_channels_s\n" +
processAndAssert("struct_no_prefix output_channels_s\n" +
"uint16_t autoscale RPMValue;feee;\"RPM\",1, 0, 0, 8000, 2\n" +
"bit sd_logging_internal\n" +
"end_struct";
"end_struct", "\t{engine->outputChannels.RPMValue, \"feee\", \"RPM\", 2},\n", readerState -> {
ReaderState state = new ReaderState();
SdCardFieldsConsumer consumer = new SdCardFieldsConsumer(LazyFile.TEST);
state.readBufferedReader(test, consumer);
assertEquals("\t{engine->outputChannels.RPMValue, \"feee\", \"RPM\", 2},\n", consumer.getBody());
});
}
@Test
public void array() {
String test = "struct_no_prefix output_channels_s\n" +
processAndAssert("struct_no_prefix output_channels_s\n" +
"uint16_t[4 iterate] recentErrorCode;;\"error\", 1, 0, 0, 0, 0\n" +
"end_struct";
ReaderState state = new ReaderState();
SdCardFieldsConsumer consumer = new SdCardFieldsConsumer(LazyFile.TEST);
state.readBufferedReader(test, consumer);
assertEquals("\t{engine->outputChannels.recentErrorCode[0], \"recentErrorCode 1\", \"error\", 0},\n" +
"end_struct", "\t{engine->outputChannels.recentErrorCode[0], \"recentErrorCode 1\", \"error\", 0},\n" +
"\t{engine->outputChannels.recentErrorCode[1], \"recentErrorCode 2\", \"error\", 0},\n" +
"\t{engine->outputChannels.recentErrorCode[2], \"recentErrorCode 3\", \"error\", 0},\n" +
"\t{engine->outputChannels.recentErrorCode[3], \"recentErrorCode 4\", \"error\", 0},\n", consumer.getBody());
"\t{engine->outputChannels.recentErrorCode[3], \"recentErrorCode 4\", \"error\", 0},\n", readerState -> {
});
}
@Test
public void bitAndAlignment2() {
processAndAssert("struct_no_prefix output_channels_s\n" +
" struct pid_status_s\n" +
" \tfloat pTerm;;\"\", 1, 0, -50000, 50000, 2\n" +
" end_struct\n" +
"\tpid_status_s alternatorStatus\n" +
"end_struct",
"\t{engine->outputChannels.pTerm, \"alternatorStatus.pTerm\", \"\", 2},\n",
readerState -> {
});
}
interface Actor {
void act(ReaderState readerState);
}
private static void processAndAssert(String input, String expectedOutput, Actor actor) {
ReaderState state = new ReaderState();
actor.act(state);
SdCardFieldsConsumer consumer = new SdCardFieldsConsumer(LazyFile.TEST);
state.readBufferedReader(input, consumer);
assertEquals(expectedOutput, consumer.getBody());
}
}