Lines 1-99
Link Here
|
1 |
//Copyright (c) 2015 Ultimaker B.V. |
|
|
2 |
//CuraEngine is released under the terms of the AGPLv3 or higher. |
3 |
|
4 |
#include "GCodePlannerTest.h" |
5 |
|
6 |
#include "../src/MeshGroup.h" //Needed to construct the GCodePlanner. |
7 |
|
8 |
#define ALLOWED_ESTIMATE_ERROR 0.1 //Fraction of the time estimates that the estimate is allowed to be off from the ground truth. |
9 |
|
10 |
namespace cura |
11 |
{ |
12 |
|
13 |
CPPUNIT_TEST_SUITE_REGISTRATION(GCodePlannerTest); |
14 |
|
15 |
void GCodePlannerTest::setUp() |
16 |
{ |
17 |
SettingsBase settings; |
18 |
settings.setSetting("machine_extruder_count", "1"); |
19 |
MeshGroup meshgroup(&settings); |
20 |
meshgroup.createExtruderTrain(0); |
21 |
|
22 |
storage = new SliceDataStorage(&meshgroup); //Empty data. |
23 |
storage->retraction_config_per_extruder[0].speed = 25; // set some semi realistic data |
24 |
storage->retraction_config_per_extruder[0].primeSpeed = 25; |
25 |
storage->retraction_config_per_extruder[0].distance = 10; |
26 |
|
27 |
// make a new GCodePathConfig and put it at a dummy place (note that the config is not an actual travel config!) |
28 |
storage->travel_config_per_extruder.emplace_back(PrintFeatureType::MoveCombing); |
29 |
storage->travel_config_per_extruder.back().init(60, MM2INT(0.4), 3000, 20, 1.0); |
30 |
|
31 |
FanSpeedLayerTimeSettings fan_speed_layer_time_settings; //A dummy fan speed and layer time settings. |
32 |
fan_speed_layer_time_settings.cool_min_layer_time = 0; |
33 |
fan_speed_layer_time_settings.cool_min_layer_time_fan_speed_max = 1; |
34 |
fan_speed_layer_time_settings.cool_fan_speed_min = 0; |
35 |
fan_speed_layer_time_settings.cool_fan_speed_max = 1; |
36 |
fan_speed_layer_time_settings.cool_min_speed = 0.5; |
37 |
std::vector<FanSpeedLayerTimeSettings> fan_speed_layer_time_settings_per_extruder; |
38 |
fan_speed_layer_time_settings_per_extruder.push_back(fan_speed_layer_time_settings); |
39 |
// Slice layer z layer last current is inside fan speed and layer combing comb travel travel avoid |
40 |
// storage nr height position extruder mesh time settings mode offset avoid distance |
41 |
gCodePlanner = new GCodePlanner(*storage, 0, 0, 0.1, Point(0,0), 0, false, fan_speed_layer_time_settings_per_extruder, CombingMode::OFF, 100, false, 50 ); |
42 |
} |
43 |
|
44 |
void GCodePlannerTest::tearDown() |
45 |
{ |
46 |
delete gCodePlanner; |
47 |
gCodePlanner = nullptr; |
48 |
delete storage; |
49 |
storage = nullptr; |
50 |
} |
51 |
|
52 |
void GCodePlannerTest::computeNaiveTimeEstimatesRetractionTest() |
53 |
{ |
54 |
|
55 |
TimeMaterialEstimates estimate_empty = gCodePlanner->computeNaiveTimeEstimates(); //First try estimating time and material without any content. |
56 |
TimeMaterialEstimates estimate_empty_expected(0,0,0,0); //We expect the estimate of all time and material used to be 0. |
57 |
verifyEstimates(estimate_empty,estimate_empty_expected,"Empty GCodePlanner"); |
58 |
|
59 |
GCodeExport gcode; |
60 |
GCodePathConfig configuration = storage->travel_config_per_extruder.back(); |
61 |
RetractionConfig retraction_config = storage->retraction_config_per_extruder.back(); |
62 |
gCodePlanner->addExtrusionMove(Point(0, 0), &configuration, SpaceFillType::Lines, 1.0f); //Need to have at least one path to have a configuration. |
63 |
GCodePath* travel_path = gCodePlanner->getLatestPathWithConfig(&configuration, SpaceFillType::None); |
64 |
gCodePlanner->addTravel_simple(Point(10, 0), travel_path); |
65 |
TimeMaterialEstimates before_retract = gCodePlanner->computeNaiveTimeEstimates(); |
66 |
travel_path->retract = true; |
67 |
TimeMaterialEstimates after_retract = gCodePlanner->computeNaiveTimeEstimates(); |
68 |
TimeMaterialEstimates estimate_one_retraction = after_retract - before_retract; |
69 |
double retract_unretract_time = retraction_config.distance / retraction_config.primeSpeed; |
70 |
TimeMaterialEstimates estimate_one_retraction_expected(0,retract_unretract_time * 0.5,retract_unretract_time * 0.5,0); |
71 |
verifyEstimates(estimate_one_retraction,estimate_one_retraction_expected,"One retraction"); |
72 |
} |
73 |
|
74 |
void GCodePlannerTest::verifyEstimates(const TimeMaterialEstimates& observed,const TimeMaterialEstimates& expected,std::string test_description) |
75 |
{ |
76 |
//Check each of the four estimates in the TimeMaterialEstimate instances. |
77 |
{ |
78 |
std::stringstream ss; |
79 |
ss << test_description << ": Extrude time is " << observed.getExtrudeTime() << " instead of the expected " << expected.getExtrudeTime(); |
80 |
CPPUNIT_ASSERT_MESSAGE(ss.str(),observed.getExtrudeTime() - expected.getExtrudeTime() < expected.getExtrudeTime() * ALLOWED_ESTIMATE_ERROR + 0.001); |
81 |
} |
82 |
{ |
83 |
std::stringstream ss; |
84 |
ss << test_description << ": Unretracted travel time is " << (observed.getTotalUnretractedTime() - observed.getExtrudeTime()) << " instead of the expected " << (expected.getTotalUnretractedTime() - expected.getExtrudeTime()); |
85 |
CPPUNIT_ASSERT_MESSAGE(ss.str(),observed.getTotalUnretractedTime() - observed.getExtrudeTime() - (expected.getTotalUnretractedTime() - expected.getExtrudeTime()) < (expected.getTotalUnretractedTime() - expected.getExtrudeTime()) * ALLOWED_ESTIMATE_ERROR + 0.001); |
86 |
} |
87 |
{ |
88 |
std::stringstream ss; |
89 |
ss << test_description << ": Retracted travel time is " << (observed.getTotalTime() - observed.getTotalUnretractedTime()) << " instead of the expected " << (expected.getTotalTime() - expected.getTotalUnretractedTime()); |
90 |
CPPUNIT_ASSERT_MESSAGE(ss.str(),observed.getTotalTime() - observed.getTotalUnretractedTime() - (expected.getTotalTime() - expected.getTotalUnretractedTime()) < (expected.getTotalTime() - expected.getTotalUnretractedTime()) * ALLOWED_ESTIMATE_ERROR + 0.001); |
91 |
} |
92 |
{ |
93 |
std::stringstream ss; |
94 |
ss << test_description << ": Material used is " << observed.getMaterial() << " instead of the expected " << expected.getMaterial(); |
95 |
CPPUNIT_ASSERT_MESSAGE(ss.str(),observed.getMaterial() - expected.getMaterial() < expected.getMaterial() * ALLOWED_ESTIMATE_ERROR + 0.001); |
96 |
} |
97 |
} |
98 |
|
99 |
} |