mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
477 lines
9.9 KiB
C++
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 --
|
|
|