Skip to content

Commit e0895f3

Browse files
committed
Added tick calculation function and unit tests
1 parent fa92b4a commit e0895f3

4 files changed

Lines changed: 82 additions & 0 deletions

File tree

src/app/calc/utilities.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,35 @@ double utilities::SimpsonsWeight (unsigned int i, unsigned int n)
3939
if (i % 2 != 0) return 4.0 / 3.0;
4040
return 2.0 / 3.0;
4141
}
42+
43+
double utilities::NiceStep(double range, int initialCircles)
44+
{
45+
double niceStep = 0.0;
46+
double roughStep = (initialCircles > 0) ? range / initialCircles : range;
47+
double exponent = floor(log10(roughStep));
48+
double fraction = roughStep / pow(10, exponent);
49+
50+
if (fraction < 1.5)
51+
{
52+
niceStep = 1.0 * pow(10, exponent);
53+
}
54+
else
55+
{
56+
if (fraction < 3.0)
57+
{
58+
niceStep = 2.0 * pow(10, exponent);
59+
}
60+
else
61+
{
62+
if (fraction < 7.5)
63+
{
64+
niceStep = 5.0 * pow(10, exponent);
65+
}
66+
else
67+
{
68+
niceStep = 10.0 * pow(10, exponent);
69+
}
70+
}
71+
}
72+
return niceStep;
73+
}

src/app/calc/utilities.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class utilities
1515
double ComplexAbs(std::complex<double> c);
1616
double ComplexAbsSquared(std::complex<double> c);
1717
double SimpsonsWeight (unsigned int i, unsigned int n);
18+
double NiceStep(double range, int initialCircles);
1819
};
1920

2021
#endif // UTILITIES_H

src/test/test_utilities.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,48 @@ void TestUtilities::test_SimpsonsWeight()
8989
// Even indexed points (2)
9090
QVERIFY(qFuzzyCompare(mUtilities->SimpsonsWeight(2, n), 2.0/3.0));
9191
}
92+
93+
//Test case: NiceStep for a small range
94+
void TestUtilities::test_NiceStep_SmallRange()
95+
{
96+
double range = 1.0;
97+
int initialCircles = 10;
98+
QCOMPARE(mUtilities->NiceStep(range, initialCircles), 0.1);
99+
}
100+
101+
//Test case: NiceStep for a large range
102+
void TestUtilities::test_NiceStep_LargeRange()
103+
{
104+
// Test for fraction < 3.0
105+
double range1 = 25.0;
106+
int initialCircles1 = 10;
107+
QCOMPARE(mUtilities->NiceStep(range1, initialCircles1), 2.0);
108+
109+
// Test for fraction < 7.5
110+
double range2 = 55.0;
111+
int initialCircles2 = 10;
112+
QCOMPARE(mUtilities->NiceStep(range2, initialCircles2), 5.0);
113+
114+
// Test for fraction >= 7.5
115+
double range3 = 80.0;
116+
int initialCircles3 = 10;
117+
QCOMPARE(mUtilities->NiceStep(range3, initialCircles3), 10.0);
118+
}
119+
120+
void TestUtilities::test_NiceStep_EdgeCases()
121+
{
122+
// Range is a power of 10
123+
double range1 = 100.0;
124+
int initialCircles1 = 10;
125+
QCOMPARE(mUtilities->NiceStep(range1, initialCircles1), 10.0);
126+
127+
// A zero range
128+
double range2 = 0.0;
129+
int initialCircles2 = 1;
130+
QCOMPARE(mUtilities->NiceStep(range2, initialCircles2), 0.0);
131+
132+
// A zero initialCircle
133+
double range3 = 1.0;
134+
int initialCircles3 = 0;
135+
QCOMPARE(mUtilities->NiceStep(range3, initialCircles3), 1.0);
136+
}

src/test/test_utilities.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ private slots:
2020
void test_ComplexAbsSquared();
2121
void test_ComplexAbs();
2222
void test_SimpsonsWeight();
23+
void test_NiceStep_SmallRange();
24+
void test_NiceStep_LargeRange();
25+
void test_NiceStep_EdgeCases();
26+
2327

2428
private:
2529
utilities *mUtilities;

0 commit comments

Comments
 (0)