I'm trying to write a Scaler class that takes a child Test which has a Score.
The Scaler uses it's child's score class's scale method to rescale its value (ex. 1/1 with scale 5 = 5/5 or 0/1 with scale 5 = 0/5).
However whenever I run my code using the DummyTest class as a child it returns a "-nan(ind)/5 instead of 5/5 and my test case fails
TEST_CASE("Scaling test returning 1/1 to 5/5")
{
auto test = std::make_shared<DummyTest>(Score(1, 1)); // Tests that always returns 1/1
Scaler scaler(test, 5);
CHECK(scaler.run() == Score(5, 5));
}
this is my code:
class Score {
public:
double value;
double maximum;
Score() : value(0), maximum(0) { }
Score(double maximum) : value(0), maximum(maximum) { }
Score(double value, double maximum) : value(value), maximum(maximum) { }
Score scale(double scale) const;
bool success();
};
Score Score::scale(double scale) const {
double a = (value / maximum) * scale;
double b = scale;
return Score(a , b);
}
class Test {
public:
virtual Score run() const;
};
class DummyTest : public Test {
Score score;
public:
DummyTest(const Score& score) : score(score) { }
Score run() const override {
return score;
}
};
class Scaler : public Test {
public:
Test child;
double maximum;
Scaler(std::shared_ptr<Test> child, double maximum) : child(*child), maximum(maximum) { }
Score run() const override;
};
Score Scaler::run() const {
Score c = child.run().scale(maximum);
return c;
}
Aucun commentaire:
Enregistrer un commentaire