GY-63_MS5611/libraries/Angle/examples/test_angle01/test_angle01.ino
2021-10-17 22:24:38 +02:00

477 lines
9.9 KiB
C++

//
// FILE: test_angle01.ino
// AUTHOR: Rob Tillaart
// PURPOSE: demo sketch to test angle class
// DATE: 2015-07-30
// URL: https://github.com/RobTillaart/Angle.git
//
#include "Angle.h"
Angle a(1, 2, 3, 4);
Angle b(45, 30);
Angle c(2, 3, 4, 5);
Angle n(0);
Angle z(5.5);
Angle aa(-1, 2, 3, 45);
Angle bb(0, -2, 3, 45);
Angle cc(0, 0, -3, 45);
Angle dd(0, 0, 0, -45);
void testConstructors()
{
Serial.println("\n1. print -- Angle(d, m, s, t)");
Serial.println(a);
Serial.println(b);
Serial.println(c);
Serial.println(n);
Serial.println(z);
Serial.println("\n1. print -- negative angles");
Serial.println(aa);
Serial.println(bb);
Serial.println(cc);
Serial.println(dd);
Serial.println("\n1. Constructor(char *)");
char str1[] = "179.999999999";
Angle s(str1);
Angle t = str1;
Serial.println(str1);
Serial.println(s);
Serial.println(s.toDouble(), 9);
Serial.println(t);
t = s.toDouble();
Serial.println(t);
char str2[] = "-45.987654321";
Angle u(str2);
Angle v = str2;
Serial.println(u);
Serial.println(u.toDouble(), 9);
Serial.println(v);
char str3[] = "-0.987654321";
Angle uu(str3);
Angle vv = str2;
Serial.println(uu);
Serial.println(uu.toDouble(), 9);
Serial.println(vv);
}
void testToDouble()
{
Serial.println("\n2.1 toDouble -- Angle(double) toRadians()");
Serial.println(a.toDouble(), 7);
Serial.println(b.toDouble(), 7);
Serial.println(c.toDouble(), 7);
Serial.println();
Angle d(c.toDouble());
Serial.println(c);
Serial.println(d);
Serial.println(c.toDouble(), 7);
Serial.println(d.toDouble(), 7);
Serial.println(c.toRadians(), 7);
d = 180;
Serial.println(d.toRadians(), 7);
Serial.println("\n2.2 toDouble -- negative angles");
Serial.println(aa);
Serial.println(aa.toDouble(), 7);
Serial.println(bb);
Serial.println(bb.toDouble(), 7);
Serial.println(cc);
Serial.println(cc.toDouble(), 7);
Serial.println(dd);
Serial.println(dd.toDouble(), 7);
Serial.println();
Serial.println("\n2.3 toDouble - fromRadians");
aa.fromRadians(2 * PI);
Serial.println(aa);
aa.fromRadians(PI);
Serial.println(aa);
aa.fromRadians(PI / 2);
Serial.println(aa);
aa.fromRadians(PI / 3);
Serial.println(aa);
aa.fromRadians(PI / 4);
Serial.println(aa);
aa.fromRadians(PI / 6);
Serial.println(aa);
aa.fromRadians(PI / 12);
Serial.println(aa);
aa.fromRadians(PI / 18);
Serial.println(aa);
aa.fromRadians(PI / 36);
Serial.println(aa);
aa.fromRadians(PI / 180);
Serial.println(aa);
Serial.println();
}
void testParts()
{
Serial.println("\n3. degrees, minutes, seconds, thousands");
Serial.println(c);
Serial.println(c.sign());
Serial.println(c.degree());
Serial.println(c.minute());
Serial.println(c.second());
Serial.println(c.tenthousand());
Serial.println(cc);
Serial.println(cc.sign());
Serial.println(cc.degree());
Serial.println(cc.minute());
Serial.println(cc.second());
Serial.println(cc.tenthousand());
}
void testCompare()
{
Serial.println("\n4. Compare: a op a op: == != < <= > >=");
Serial.println(" should be 100101");
Serial.println(a);
Serial.print(a == a);
Serial.print(a != a);
Serial.print(a < a);
Serial.print(a <= a);
Serial.print(a > a);
Serial.print(a >= a);
Serial.println();
Serial.println("\n4. Compare: a op c op: == != < <= > >=");
Serial.println(" should be 011100"); // A < C
Serial.println(a);
Serial.println(c);
Serial.print(a == c);
Serial.print(a != c);
Serial.print(a < c);
Serial.print(a <= c);
Serial.print(a > c);
Serial.print(a >= c);
Serial.println();
Serial.println("\n4. Compare: -a op c op: == != < <= > >=");
Serial.println(" should be 011100"); // A < C
a = -a;
Serial.println(a);
Serial.println(c);
Serial.print(a == c);
Serial.print(a != c);
Serial.print(a < c);
Serial.print(a <= c);
Serial.print(a > c);
Serial.print(a >= c);
Serial.println();
Serial.println("\n4. Compare: -a op -c op: == != < <= > >=");
Serial.println(" should be 010011"); // C < A
c = -c;
Serial.println(a);
Serial.println(c);
Serial.print(a == c);
Serial.print(a != c);
Serial.print(a < c);
Serial.print(a <= c);
Serial.print(a > c);
Serial.print(a >= c);
Serial.println();
}
void testNegate()
{
Serial.println("\n6. negate ");
Serial.println(a);
a = -a;
Serial.println(a);
a = -a;
Serial.println(a);
Angle tt(0, 1, 2, 3);
Serial.println(-tt);
Angle uu(0, 0, 2, 3);
Serial.println(-uu);
Angle vv(0, 0, 0, 3);
Serial.println(-vv);
Angle ww(0, 0, 0, 0);
Serial.println(-ww);
}
void testAdd()
{
Serial.println("\n7.1 Add +");
for (int x = -1; x < 2; x++)
for (int y = -1; y < 2; y++)
{
a = x;
b = y;
Angle d = a + b;
Serial.print(a);
Serial.print("\t+\t");
Serial.print(b);
Serial.print("\t=\t");
Serial.println(d);
}
Serial.println("\n7.2 Add +=");
for (int x = -1; x < 2; x++)
for (int y = -1; y < 2; y++)
{
a = x;
b = y;
Serial.print(a);
Serial.print("\t+=\t");
Serial.print(b);
Serial.print("\tresults in\t");
a += b;
Serial.println(a);
}
Serial.println("\n7.3 Add - 1000 random tests - no output is ok");
for (int i = 0; i < 1000; i++)
{
double x = random(36000) / 100.0 - 180;
double y = random(36000) / 100.0 - 180;
double z = x + y;
a = x;
b = y;
Angle d = a + b;
if ( abs(d.toDouble() - z) > 0.001)
{
Serial.print(i);
Serial.print("\t");
Serial.print(Angle(x));
Serial.print("\t");
Serial.print(Angle(y));
Serial.print("\t");
Serial.print(z);
Serial.print("\t");
Serial.print(Angle(z));
Serial.print("\t");
Serial.print(d.toDouble());
Serial.print("\t");
Serial.print(d);
Serial.println();
}
}
Serial.println("\n7.4 Add - 1000 random tests - no output is ok");
for (int i = 0; i < 1000; i++)
{
double x = random(200) / 100.0 - 1;
double y = random(200) / 100.0 - 1;
double z = x + y;
a = x;
b = y;
Angle d = a + b;
if ( abs(d.toDouble() - z) > 0.00001)
{
Serial.print(i);
Serial.print("\t");
Serial.print(Angle(x));
Serial.print("\t");
Serial.print(Angle(y));
Serial.print("\t");
Serial.print(z);
Serial.print("\t");
Serial.print(Angle(z));
Serial.print("\t");
Serial.print(d.toDouble());
Serial.print("\t");
Serial.print(d);
Serial.println();
}
}
Serial.println("\n7.5 Add a double to an angle ");
for (int i = 0; i < 10; i++)
{
double x = random(36000) / 100.0 - 180;
double y = random(36000) / 100.0 - 180;
a = x;
b = y;
Angle d = a + y;
Serial.print(i);
Serial.print("\t");
Serial.print(x);
Serial.print("\t");
Serial.print(y);
Serial.print("\t");
Serial.print(d);
Serial.println();
}
}
void testSubtract()
{
Serial.println("\n8.1 Subtract -");
for (int x = -1; x < 2; x++)
for (int y = -1; y < 2; y++)
{
a = x;
b = y;
Angle d = a - b;
Serial.print(a);
Serial.print("\t-\t");
Serial.print(b);
Serial.print("\t=\t");
Serial.println(d);
}
Serial.println("\n8.2 Subtract -=");
for (int x = -1; x < 2; x++)
for (int y = -1; y < 2; y++)
{
a = x;
b = y;
Serial.print(a);
Serial.print("\t-=\t");
Serial.print(b);
Serial.print("\tresults in\t");
a -= b;
Serial.println(a);
}
Serial.println("\n8.3 Sub - 1000 random tests - no output is ok");
for (int i = 0; i < 1000; i++)
{
double x = random(36000) / 100.0 - 180;
double y = random(36000) / 100.0 - 180;
double z = x - y;
a = x;
b = y;
Angle d = a - b;
if ( abs(d.toDouble() - z) > 0.001)
{
Serial.print(i);
Serial.print("\t");
Serial.print(Angle(x));
Serial.print("\t");
Serial.print(Angle(y));
Serial.print("\t");
Serial.print(z);
Serial.print("\t");
Serial.print(Angle(z));
Serial.print("\t");
Serial.print(d.toDouble());
Serial.print("\t");
Serial.print(d);
Serial.println();
}
}
Serial.println("\n8.4 Sub - 1000 random tests - no output is ok");
for (int i = 0; i < 1000; i++)
{
double x = random(200) / 100.0 - 1;
double y = random(200) / 100.0 - 1;
double z = x - y;
a = x;
b = y;
Angle d = a - b;
if ( abs(d.toDouble() - z) > 0.00001)
{
Serial.print(i);
Serial.print("\t");
Serial.print(Angle(x));
Serial.print("\t");
Serial.print(Angle(y));
Serial.print("\t");
Serial.print(z);
Serial.print("\t");
Serial.print(Angle(z));
Serial.print("\t");
Serial.print(d.toDouble());
Serial.print("\t");
Serial.print(d);
Serial.println();
}
}
}
void testMultiply()
{
Serial.println("\n9. Multiply * *=");
a = 5.25;
Serial.println(a);
a = a * 5.5;
Serial.println(a);
a *= 3.1;
Serial.println(a);
}
void testDivide()
{
Serial.println("\n10. Divide / /=");
Serial.println(a);
Angle d = a / 3.1;
Serial.println(d);
d /= 5.5;
Serial.println(d);
d /= PI;
Serial.println(d);
}
void testRatio()
{
Serial.println("\n11. Ratio");
a = 7.50;
b = 57.456789;
Serial.println(a);
Serial.println(b);
Serial.println(b / a, 7);
a = 180;
b = 57.295779513082320876798154814105; // one radian
Serial.println(a);
Serial.println(b);
Serial.println(a / b, 7); // should be PI
}
void setup()
{
Serial.begin(115200);
Serial.println("Start test_angle01");
Serial.print("lib version: ");
Serial.println(ANGLE_LIB_VERSION);
testConstructors();
testToDouble();
testParts();
testNegate();
testCompare();
testAdd();
testSubtract();
testMultiply();
testDivide();
testRatio();
Serial.println("\nDone...");
}
void loop()
{
}
// -- END OF FILE --