source: tests/enum_tests/planet.cfa@ a9ae5ca

Last change on this file since a9ae5ca was b2ca052, checked in by Peter A. Buhr <pabuhr@…>, 14 months ago

move planet test under directory enum_tests

  • Property mode set to 100644
File size: 1.9 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>
3#include <enum.hfa>
4
5struct MR { double mass, radius; };
6
7enum( MR ) Planet { // typed enumeration
8 // mass (kg) radius (km)
9 MERCURY = { 0.330_E24, 2.4397_E6 },
10 VENUS = { 4.869_E24, 6.0518_E6 },
11 EARTH = { 5.976_E24, 6.3781_E6 },
12 MOON = { 7.346_E22, 1.7380_E6 }, // not a planet
13 MARS = { 0.642_E24, 3.3972_E6 },
14 JUPITER = { 1898._E24, 71.492_E6 },
15 SATURN = { 568.8_E24, 60.268_E6 },
16 URANUS = { 86.86_E24, 25.559_E6 },
17 NEPTUNE = { 102.4_E24, 24.746_E6 },
18 PLUTO = { 1.303_E22, 1.1880_E6 }, // not a planet
19};
20
21enum( double ) { G = 6.6743_E-11 }; // universal gravitational constant (m3 kg-1 s-2)
22
23static double surfaceGravity( Planet p ) with( p ) {
24// return G * mass / ( radius \ 2 ); // no qualification, exponentiation
25 return G * p.mass / ( p.radius \ 2 ); // qualification, exponentiation
26}
27static double surfaceWeight( Planet p, double otherMass ) {
28 return otherMass * surfaceGravity( p );
29}
30
31int main( int argc, char * argv[] ) {
32// if ( argc != 2 ) exit | "Usage: " | argv[0] | "earth-weight"; // terminate program
33// double earthWeight = convert( argv[1] );
34 double earthWeight;
35 sin | earthWeight; // test-suite input comes for indirection
36 double earthMass = earthWeight / surfaceGravity( EARTH );
37
38// Planet rp = fromInt( prng( countof( Planet ) ) ); // select random orbiting body
39 Planet rp = fromInt( countof( Planet ) - 1 ); // non-random for test suite
40 choose( rp ) { // implicit breaks
41 case MERCURY, VENUS, EARTH, MARS:
42 sout | rp | "is a rocky planet";
43 case JUPITER, SATURN, URANUS, NEPTUNE:
44 sout | rp | "is a gas-giant planet";
45 default:
46 sout | rp | "is not a planet";
47 }
48
49 for ( p; Planet ) { // enumerate
50 sout | "Your weight on" | ( p == MOON ? "the" : " " ) | p
51 | "is" | wd( 1,1, surfaceWeight( p, earthMass ) ) | "kg";
52 }
53}
Note: See TracBrowser for help on using the repository browser.