using Towel.Measurements;
using static Towel.Measurements.MeasurementUnitsSyntax;
using Speedf = Towel.Measurements.Speed<float>;
public static void Main()
#region Specific Measurement Type Examples
Console.WriteLine(" Angle--------------------------------------");
Angle<double> angle1 = new Angle<double>(90, Degrees);
Console.WriteLine(" angle1 = " + angle1);
Angle<double> angle2 = new Angle<double>(0.5, Revolutions);
Console.WriteLine(" angle2 = " + angle2);
Console.WriteLine(" angle1 + angle2 = " + (angle1 + angle2));
Console.WriteLine(" angle2 - angle1 = " + (angle2 - angle1));
Console.WriteLine(" angle1 * 2 = " + (angle1 * 2));
Console.WriteLine(" angle1 / 2 = " + (angle1 / 2));
Console.WriteLine(" angle1 > angle2 = " + (angle1 > angle2));
Console.WriteLine(" angle1 == angle2 = " + (angle1 == angle2));
Console.WriteLine(" angle1 * 2 == angle2 = " + (angle1 * 2 == angle2));
Console.WriteLine(" angle1 != angle2 = " + (angle1 != angle2));
Console.WriteLine(" Length--------------------------------------");
Length<double> length1 = new Length<double>(1d, Meters);
Console.WriteLine(" length1 = " + length1);
Length<double> length2 = new Length<double>(2d, Yards);
Console.WriteLine(" length2 = " + length2);
Console.WriteLine(" length1 + length2 = " + (length1 + length2));
Console.WriteLine(" length2 - length1 = " + (length2 - length1));
Console.WriteLine(" length1 * 2 = " + (length1 * 2));
Console.WriteLine(" length1 / 2 = " + (length1 / 2));
Console.WriteLine(" length1 > length2 = " + (length1 > length2));
Console.WriteLine(" length1 == length2 = " + (length1 == length2));
Console.WriteLine(" length1 * 2 == length2 = " + (length1 * 2 == length2));
Console.WriteLine(" length1 != length2 = " + (length1 != length2));
Console.WriteLine(" Mass--------------------------------------");
Mass<double> mass1 = new Mass<double>(1d, Grams);
Console.WriteLine(" mass1 = " + mass1);
Mass<double> mass2 = new Mass<double>(2d, Kilograms);
Console.WriteLine(" mass2 = " + mass2);
Console.WriteLine(" mass1 + mass2 = " + (mass1 + mass2));
Console.WriteLine(" mass2 - mass1 = " + (mass2 - mass1));
Console.WriteLine(" mass1 * 2 = " + (mass1 * 2));
Console.WriteLine(" mass1 / 2 = " + (mass1 / 2));
Console.WriteLine(" mass1 > mass2 = " + (mass1 > mass2));
Console.WriteLine(" mass1 == mass2 = " + (mass1 == mass2));
Console.WriteLine(" mass1 * 2 == mass2 = " + (mass1 * 2 == mass2));
Console.WriteLine(" mass1 != mass2 = " + (mass1 != mass2));
Console.WriteLine(" Time--------------------------------------");
Time<double> time1 = new Time<double>(1d, Seconds);
Console.WriteLine(" time1 = " + time1);
Time<double> time2 = new Time<double>(2d, Minutes);
Console.WriteLine(" time2 = " + time2);
Console.WriteLine(" time1 + time2 = " + (time1 + time2));
Console.WriteLine(" time2 - time1 = " + (time2 - time1));
Console.WriteLine(" time1 * 2 = " + (time1 * 2));
Console.WriteLine(" time1 / 2 = " + (time1 / 2));
Console.WriteLine(" time1 > time2 = " + (time1 > time2));
Console.WriteLine(" time1 == time2 = " + (time1 == time2));
Console.WriteLine(" time1 * 2 == time2 = " + (time1 * 2 == time2));
Console.WriteLine(" time1 != time2 = " + (time1 != time2));
Console.WriteLine(" Area--------------------------------------");
Area<double> area1 = new Area<double>(1d, Meters * Meters);
Console.WriteLine(" area1 = " + area1);
Area<double> area2 = new Area<double>(2d, Yards * Yards);
Console.WriteLine(" area2 = " + area2);
Console.WriteLine(" area1 + area2 = " + (area1 + area2));
Console.WriteLine(" area2 - area1 = " + (area2 - area1));
Console.WriteLine(" area1 * 2 = " + (area1 * 2));
Console.WriteLine(" area1 / 2 = " + (area1 / 2));
Console.WriteLine(" area1 > area2 = " + (area1 > area2));
Console.WriteLine(" area1 == area2 = " + (area1 == area2));
Console.WriteLine(" area1 * 2 == area2 = " + (area1 * 2 == area2));
Console.WriteLine(" area1 != area2 = " + (area1 != area2));
Console.WriteLine(" Volume--------------------------------------");
Volume<double> volume1 = new Volume<double>(1d, Meters * Meters * Meters);
Console.WriteLine(" volume1 = " + volume1);
Volume<double> volume2 = new Volume<double>(2d, Yards * Yards * Yards);
Console.WriteLine(" volume2 = " + volume2);
Console.WriteLine(" volume1 + volume2 = " + (volume1 + volume2));
Console.WriteLine(" volume2 - volume1 = " + (volume2 - volume1));
Console.WriteLine(" volume1 * 2 = " + (volume1 * 2));
Console.WriteLine(" volume1 / 2 = " + (volume1 / 2));
Console.WriteLine(" volume1 > volume2 = " + (volume1 > volume2));
Console.WriteLine(" volume1 == volume2 = " + (volume1 == volume2));
Console.WriteLine(" volume1 * 2 == volume2 = " + (volume1 * 2 == volume2));
Console.WriteLine(" volume1 != volume2 = " + (volume1 != volume2));
Area<double> area3 = volume1 / length1;
Console.WriteLine(" volume1 / length1 = " + area3);
Console.WriteLine(" Speed--------------------------------------");
Speed<double> speed1 = new Speed<double>(1d, Meters / Seconds);
Console.WriteLine(" speed1 = " + speed1);
Speed<double> speed2 = new Speed<double>(2d, Inches / Milliseconds);
Console.WriteLine(" speed2 = " + speed2);
Console.WriteLine(" speed1 + speed2 = " + (speed1 + speed2));
Console.WriteLine(" speed2 - speed1 = " + (speed2 - speed1));
Console.WriteLine(" speed1 * 2 = " + (speed1 * 2));
Console.WriteLine(" speed1 / 2 = " + (speed1 / 2));
Console.WriteLine(" speed1 > speed2 = " + (speed1 > speed2));
Console.WriteLine(" speed1 == speed2 = " + (speed1 == speed2));
Console.WriteLine(" speed1 * 2 == speed2 = " + (speed1 * 2 == speed2));
Console.WriteLine(" speed1 != speed2 = " + (speed1 != speed2));
Console.WriteLine(" speed1 * time2 = " + (speed1 * time2));
Speed<double> speed3 = new Speed<double>(6d, Knots);
Console.WriteLine(" speed3 = " + speed3);
Console.WriteLine(" speed1 + speed3 = " + (speed1 + speed3));
Console.WriteLine(" Acceleration--------------------------------------");
Acceleration<double> acceleration1 = new Acceleration<double>(5d, Meters / Seconds / Seconds);
Console.WriteLine(" acceleration1 = " + acceleration1);
Acceleration<double> acceleration2 = new Acceleration<double>(4d, Inches / Milliseconds / Milliseconds);
Console.WriteLine(" acceleration2 = " + acceleration2);
Console.WriteLine(" acceleration1 + acceleration2 = " + (acceleration1 + acceleration2));
Console.WriteLine(" acceleration2 - acceleration1 = " + (acceleration2 - acceleration1));
Console.WriteLine(" acceleration1 * 2 = " + (acceleration1 * 2));
Console.WriteLine(" acceleration1 / 2 = " + (acceleration1 / 2));
Console.WriteLine(" acceleration1 > acceleration2 = " + (acceleration1 > acceleration2));
Console.WriteLine(" acceleration1 == acceleration2 = " + (acceleration1 == acceleration2));
Console.WriteLine(" acceleration1 * 2 == acceleration2 = " + (acceleration1 * 2 == acceleration2));
Console.WriteLine(" acceleration1 != acceleration2 = " + (acceleration1 != acceleration2));
Console.WriteLine(" acceleration1 * time2 = " + (acceleration1 * time2));
Console.WriteLine(" Force--------------------------------------");
Force<double> force1 = new Force<double>(1d, Kilograms * Meters / Seconds / Seconds);
Console.WriteLine(" force1 = " + force1);
Force<double> force2 = new Force<double>(2d, Newtons);
Console.WriteLine(" force2 = " + force2);
Console.WriteLine(" force1 + force2 = " + (force1 + force2));
Console.WriteLine(" force2 - force1 = " + (force2 - force1));
Console.WriteLine(" force1 * 2 = " + (force1 * 2));
Console.WriteLine(" force1 / 2 = " + (force1 / 2));
Console.WriteLine(" force1 > force2 = " + (force1 > force2));
Console.WriteLine(" force1 == force2 = " + (force1 == force2));
Console.WriteLine(" force1 * 2 == force2 = " + (force1 * 2 == force2));
Console.WriteLine(" force1 != force2 = " + (force1 != force2));
Console.WriteLine(" ElectricCurrent--------------------------------------");
ElectricCurrent<double> electricCurrent1 = new ElectricCurrent<double>(5d, Coulombs / Seconds);
Console.WriteLine(" electricCurrent1 = " + electricCurrent1);
ElectricCurrent<double> electricCurrent2 = new ElectricCurrent<double>(4d, Amperes);
Console.WriteLine(" electricCurrent2 = " + electricCurrent2);
Console.WriteLine(" electricCurrent1 + electricCurrent2 = " + (electricCurrent1 + electricCurrent2));
Console.WriteLine(" acceleration2 - electricCurrent1 = " + (electricCurrent2 - electricCurrent1));
Console.WriteLine(" electricCurrent1 * 2 = " + (electricCurrent1 * 2));
Console.WriteLine(" electricCurrent1 / 2 = " + (electricCurrent1 / 2));
Console.WriteLine(" electricCurrent1 > electricCurrent2 = " + (electricCurrent1 > electricCurrent2));
Console.WriteLine(" electricCurrent1 == electricCurrent2 = " + (electricCurrent1 == electricCurrent2));
Console.WriteLine(" electricCurrent1 * 2 == electricCurrent2 = " + (electricCurrent1 * 2 == electricCurrent2));
Console.WriteLine(" electricCurrent1 != electricCurrent2 = " + (electricCurrent1 != electricCurrent2));
Console.WriteLine(" AngularSpeed--------------------------------------");
AngularSpeed<double> angularSpeed1 = new AngularSpeed<double>(10d, Radians / Seconds);
Console.WriteLine(" angularSpeed1 = " + angularSpeed1);
AngularSpeed<double> angularSpeed2 = new AngularSpeed<double>(2200d, Degrees / Milliseconds);
Console.WriteLine(" angularSpeed2 = " + angularSpeed2);
Console.WriteLine(" angularSpeed1 + angularSpeed2 = " + (angularSpeed1 + angularSpeed2));
Console.WriteLine(" angularSpeed2 - angularSpeed1 = " + (angularSpeed2 - angularSpeed1));
Console.WriteLine(" angularSpeed1 * 2 = " + (angularSpeed1 * 2));
Console.WriteLine(" angularSpeed1 / 2 = " + (angularSpeed1 / 2));
Console.WriteLine(" angularSpeed1 > angularSpeed2 = " + (angularSpeed1 > angularSpeed2));
Console.WriteLine(" angularSpeed1 == angularSpeed2 = " + (angularSpeed1 == angularSpeed2));
Console.WriteLine(" angularSpeed1 * 2 == angularSpeed2 = " + (angularSpeed1 * 2 == angularSpeed2));
Console.WriteLine(" angularSpeed1 != angularSpeed2 = " + (angularSpeed1 != angularSpeed2));
Console.WriteLine(" angularSpeed1 * time2 = " + (angularSpeed1 * time2));
#region AngularAcceleration
Console.WriteLine(" AngularAcceleration--------------------------------------");
AngularAcceleration<double> angularAcceleration1 = new AngularAcceleration<double>(5000d, Radians / Seconds / Seconds);
Console.WriteLine(" angularAcceleration1 = " + angularAcceleration1);
AngularAcceleration<double> angularAcceleration2 = new AngularAcceleration<double>(.4d, Degrees / Milliseconds / Milliseconds);
Console.WriteLine(" angularAcceleration2 = " + angularAcceleration2);
Console.WriteLine(" angularAcceleration1 + angularAcceleration2 = " + (angularAcceleration1 + angularAcceleration2));
Console.WriteLine(" angularAcceleration2 - angularAcceleration1 = " + (angularAcceleration2 - angularAcceleration1));
Console.WriteLine(" angularAcceleration1 * 2 = " + (angularAcceleration1 * 2));
Console.WriteLine(" angularAcceleration1 / 2 = " + (angularAcceleration1 / 2));
Console.WriteLine(" angularAcceleration1 > angularAcceleration2 = " + (angularAcceleration1 > angularAcceleration2));
Console.WriteLine(" angularAcceleration1 == angularAcceleration2 = " + (angularAcceleration1 == angularAcceleration2));
Console.WriteLine(" angularAcceleration1 * 2 == angularAcceleration2 = " + (angularAcceleration1 * 2 == angularAcceleration2));
Console.WriteLine(" angularAcceleration1 != angularAcceleration2 = " + (angularAcceleration1 != angularAcceleration2));
Console.WriteLine(" angularAcceleration1 * time2 = " + (angularAcceleration1 * time2));
Console.WriteLine(" Density--------------------------------------");
Density<double> density1 = new Density<double>(5d, Kilograms / Meters / Meters / Meters);
Console.WriteLine(" density1 = " + density1);
Density<double> density2 = new Density<double>(2000d, Grams / Meters / Meters / Meters);
Console.WriteLine(" density2 = " + density2);
Console.WriteLine(" density1 + density2 = " + (density1 + density2));
Console.WriteLine(" density2 - density1 = " + (density2 - density1));
Console.WriteLine(" density1 * 2 = " + (density1 * 2));
Console.WriteLine(" density1 / 2 = " + (density1 / 2));
Console.WriteLine(" density1 > density2 = " + (density1 > density2));
Console.WriteLine(" density1 == density2 = " + (density1 == density2));
Console.WriteLine(" density1 * 2 == density2 = " + (density1 * 2 == density2));
Console.WriteLine(" density1 != density2 = " + (density1 != density2));
#region Syntax Sugar Example (removing the generic type via alias)
Speedf speedf = new Speedf(1f, Meters / Seconds);
Vector<Speed<float>> velocity1 = new Vector<Speed<float>>(
new Speed<float>(1f, Meters / Seconds),
new Speed<float>(2f, Meters / Seconds),
new Speed<float>(3f, Meters / Seconds));
Vector<Speedf> velocity2 = new Vector<Speedf>(
new Speedf(.1f, Centimeters / Seconds),
new Speedf(.2f, Centimeters / Seconds),
new Speedf(.3f, Centimeters / Seconds));
Vector<Speed<float>> velocity3 = velocity1 + velocity2;