int main()
{
    int failure = 0;

    string fid = AddGeom( "POD", "" );

    Update();

    // Projected Areas
    array<int> dirtype = GetIntAnalysisInput( "Projection", "DirectionType" );
    dirtype[0] = X_PROJ;
    SetIntAnalysisInput( "Projection", "DirectionType", dirtype );

    string rid = ExecAnalysis( "Projection" );
    PrintResults( rid );
    WriteResultsCSVFile( rid, "XProj.csv" );
    DeleteGeomVec( GetStringResults( rid, "Mesh_GeomID" ) );

    array<double> @double_arr = GetDoubleResults( rid, "Area" );
    if ( !closeTo( double_arr[0], 1.256832229736884132e+00 ) )
        failure++;

    dirtype[0] = Y_PROJ;
    SetIntAnalysisInput( "Projection", "DirectionType", dirtype );

    rid = ExecAnalysis( "Projection" );
    PrintResults( rid );
    WriteResultsCSVFile( rid, "YProj.csv" );
    DeleteGeomVec( GetStringResults( rid, "Mesh_GeomID" ) );

    @double_arr = GetDoubleResults( rid, "Area" );
    if ( !closeTo( double_arr[0], 9.699415664302019735e+00 ) )
        failure++;

    dirtype[0] = Z_PROJ;
    SetIntAnalysisInput( "Projection", "DirectionType", dirtype );

    rid = ExecAnalysis( "Projection" );
    PrintResults( rid );
    WriteResultsCSVFile( rid, "ZProj.csv" );
    DeleteGeomVec( GetStringResults( rid, "Mesh_GeomID" ) );

    @double_arr = GetDoubleResults( rid, "Area" );
    if ( !closeTo( double_arr[0], 9.699415664302019735e+00 ) )
        failure++;

    //==== Check For API Errors ====//
    while ( GetNumTotalErrors() > 0 )
    {
        ErrorObj err = PopLastError();
        Print( err.GetErrorString() );
        failure++;
    }

    return failure;
}
