I wonder what version you are using. This is how it looks in latest version and there the test is correct:
if (com->hasE() && !Printer::debugDryrun()) {
p = convertToMM(com->E * axisStepsPerMM[E_AXIS]);
if (relativeCoordinateMode
relativeExtruderCoordinateMode) {
if (
#if MIN_EXTRUDER_TEMP > 20
(Extruder::current->tempControl.currentTemperatureC < MIN_EXTRUDER_TEMP && !Printer::isColdExtrusionAllowed() && Extruder::current->tempControl.sensorType != 0) #endif
fabs(com->E) * extrusionFactor > EXTRUDE_MAXLENGTH) {
p = 0;
destinationPositionTransformed[E_AXIS] = currentPositionTransformed[E_AXIS] = 0;
} else {
destinationPositionTransformed[E_AXIS] = 0;
currentPositionTransformed[E_AXIS] = -convertToMM(com->E);
} destinationSteps[E_AXIS] = 0;
currentPositionSteps[E_AXIS] = -p;
} else {
if (
#if MIN_EXTRUDER_TEMP > 20
(Extruder::current->tempControl.currentTemperatureC < MIN_EXTRUDER_TEMP && !Printer::isColdExtrusionAllowed() && Extruder::current->tempControl.sensorType != 0) ||
#endif
fabs(p - currentPositionSteps[E_AXIS]) * extrusionFactor > EXTRUDE_MAXLENGTH * axisStepsPerMM[E_AXIS]) {
currentPositionSteps[E_AXIS] = p;
destinationPositionTransformed[E_AXIS] = currentPositionTransformed[E_AXIS] = convertToMM(com->E);
} else {
destinationPositionTransformed[E_AXIS] = convertToMM(com->E);
}
destinationSteps[E_AXIS] = p;
}
You see the here for relative positions the E value is already used.
- M82 - Set E codes absolute (default)
- M83 - Set E codes relative while in Absolute Coordinates (G90) mode
so slicer is doing it correct, but you seem to be on an old version with a bug in relative mode.