int main(){ TestCode(1337); return 404; }
int main(int argc, char* argv[]) { // store the invoking program name char* prg_name = argv[0]; // create an object of cpuClock and start it cpuClock clock; clock.Start(); // provide convenient i/o streams std::ostream& out = std::cout; std::istream& ein = std::cin; // begin application try { #if 0 TestCode(); #endif #if 1 // create some objects (which will be used repeatedly later) tCalDate<int> date; tCalGregorian<int> g; tCalJulian<int> j; tCalRataDie<int> rd; tCalIso<int> iso; tCalOldHinduSolar<int> oldHS; // rather than build date using the followig (which works). date = tCalDate<int>( -586, 7, 24); // it is safer to build a date using the following calYear y; calMonth m; calDay d; y = 1968; m = 5; d = 15; tCalDate<int> bDay(y, m, d); g = bDay; out << "Day of week for: " << g << " is " << g.Fixed().DayOfWeek() << std::endl << std::endl; y = -1900; m = 12; d = 5; y = 1968; m = 5; d = 15; y = 1994; m = 3; d = 1; y = -586; m = 7; d = 24; date.Set(y, m, d); // test gregorian calendar // test assignment, special construction etc. g = date; tCalGregorian<int> g1(g); tCalGregorian<int> g2; g2 = g; out << g << std::endl << std::endl; if ( g.isLeapYear() == true ) { out << g.Year() << " is a leap year " << std::endl; } out << "Gregorian: " << g << " => Fixed: " << g.Fixed() << std::endl; out << "Day of the week: " << g.Fixed().DayOfWeek() << std::endl << std::endl; tCalDate<int> g_ep_dt(-4713, 11, 24); tCalGregorian<int> g_ep( g_ep_dt ); tCalRataDie<int> rd_g_ep = g_ep.Fixed(); out << "Fixed from gregorian epoch: " << rd_g_ep << std::endl << std::endl; // RD to gregorian. rd = -1373427; // -3760-09-07. Hebrew epoch rd = -1721424; // -4713-11-24. Julian day epoch rd = -214193; // -0586-07-24. Table entry from book rd = -1; // 0000-12-30. A day before RD epoch rd = -272787; // -0746-02-18. Egyptian epoch rd = 1; // 0001-01-01. RD epoch rd = 654415; // 1792-09-22. French Revolutionary epoch. rd = -61387; // -0168-12-05. Table entry from book rd = -1132959; // -3101-01-23. Hindu Kali Yuga rd = 671401; // 1839-03-27. Table entry from book g = rd.Gregorian(); out << "Fixed: " << rd << " => Gregorian(epoch): " << g << std::endl << std::endl; // RD to julian day numbers. rd = -214193; out << "Julian day number for " << rd << " is " << rd.JulianDayNumber() << std::endl; y = 1993; m = 7; d = 14; date.Set(y, m, d); g = date; rd = g.Fixed(); out << "Julian day number for " << g << " is " << rd.JulianDayNumber() << std::endl << std::endl; // test Julian calendar y = -4713; m = 1; d = 1; date.Set(y, m, d); j = date; tCalJulian<int> j1(j); tCalJulian<int> j2; j2 = j1; rd = j.Fixed(); out << "Julian day number for " << j << " is " << rd.JulianDayNumber() << std::endl << std::endl; y = -3761; m = 10; d = 7; // Hebrew epoch (rd = 1,373,427) y = -3102; m = 2; d = 18; // Hindu Kali Yuga (rd = -1,132,959) y = 1; m = 1; d = 3; // Gregorian epoch (rd = 1) y = 1792; m = 9; d = 11; // French Revolutionary (rd = 654,415) y = - 747; m = 2; d = 26; // Egyptian epoch. (rd = -272,787) y = - 587; m = 7; d = 30; // table entry (checked) date.Set(y, m, d); j = date; rd = j.Fixed(); out << "Fixed date for " << j << " is " << rd << std::endl; // take the same rd and invert and check. out << "Julian date for rd: " << rd << " is: " << rd.Julian() << std::endl; // check for Julian epoch (it is the Fixed date corresponding to // gregorian date of 0-12-30 (and it yields -1). y = 0; m = 12; d =30; date.Set(y, m, d); g = date; out << "Fixed from Gregorian (Julian epoch): " << g << " is: " << g.Fixed() << std::endl << std::endl; // RD to Julian. rd = -1721424; // -4713-01-02. Julian day epoch rd = 1; // 0001-01-03. RD epoch rd = 654415; // 1792-09-11. French Revolutionary epoch. rd = -272787; // -0747-02-26. Egyptian epoch rd = -1; // 0001-01-01. Julian epoch rd = -61387; // -0169-12-08. Table entry from book rd = -214193; // -0587-07-30. Table entry from book rd = -1132959; // -3102-02-18. Hindu Kali Yuga rd = -1373427; // -3761-10-07. Hebrew epoch rd = 671401; // 1839-03-15. Table entry from book j = rd.Julian(); out << "Fixed: " << rd << " => Julian (epoch): " << j << std::endl; rd = j.Fixed(); out << "Julian: " << j << " => RD (epoch): " << rd << std::endl << std::endl; #if 0 // not testing iso, hindu etc for now. // Test ISO calender calIsoDate isoDate; calWeek w; y = -586; w = 29; d = 7; isoDate.Set(y, w, d); iso = isoDate; tCalIso<int> iso1 = iso; tCalIso<int> iso2; iso2 = iso1; rd = iso.Fixed(); out << "For IsoDate: " << iso << " Fixed = " << rd << std::endl; rd = 671401; // 1839-13-03. Table entry from book rd = -61387; // -168-49-03 rd = 601716; // 1648-24-03 rd = -214193; // -0586-29-07. Table entry from book rd = 434355; // 1190-12-05 iso = rd.Iso(); out << "Fixed: " << rd << " => ISO (epoch): " << iso << std::endl; rd = iso.Fixed(); out << "ISO: " << iso << " => RD (epoch): " << rd << std::endl << std::endl; // what is the iso of todays date? (2004-04-16); y = 2004; m = 4; d = 19; date.Set(y, m, d); g = date; rd = g.Fixed(); out << "Gregorian: " << g << " => ISO: " << rd.Iso() << std::endl << std::endl; y = 2005; m = 1; d = 1; date.Set(y, m, d); g = date; rd = g.Fixed(); out << "Gregorian: " << g << " => ISO: " << rd.Iso() << std::endl << std::endl; // date difference (gives number of days between two dates) tCalGregorian<int> g_beg; tCalGregorian<int> g_end; g_beg = tCalDate<int>(1968, 5, 15); g_end = tCalDate<int>(2004, 4, 16); out << "No of days between: " << g_beg << " and " << g_end << " = " << g_end-g_beg << std::endl << std::endl; // Old hindu calendars y = -3102; m = 2; d = 18; date.Set(y, m, d); j = date; rd = j.Fixed(); g = rd.Gregorian(); out << "Hindu epoch (in RD) = " << j.Fixed() << " => Julian date: " << j << std::endl << " Gregorian date is: " << g << std::endl << std::endl; tCalOldHinduSolar<int> oldHS1 = oldHS; tCalOldHinduSolar<int> oldHS2; oldHS2 = oldHS1; out << "Arya solar year: " << std::setprecision(16) << oldHS.AryaSolarYear() << std::endl << "Jovian period: " << oldHS.JovianPeriod() << std::endl << std::endl; rd = -214193; rd = 764652; oldHS = rd.OldHinduSolar(); out << "rd: " << rd << " => old hindu solar: " << oldHS << std::endl << std::endl; y = 2515; m = 5; d = 19; date.Set(y, m, d); oldHS = date; rd = oldHS.Fixed(); out << "Old hindu solar date: " << oldHS << " => rd: " << rd << std::endl << std::endl; // there is some trouble in implementing calOldHinduLunar. dont know what it is // but we are not able to put the copy constructor in the implementation file. // calOldHinduLunar is an imitation written afresh to settle this problem. tCalOldHinduLunar<int> old_hl; rd = -214193; rd = 764652; old_hl = rd.OldHinduLunar(); out << "rd: " << rd << " => old hindu lunar: " << old_hl << std::endl << std::endl; bool lm; calDateOldHinduLunar l_date; y = 2515; m = 6; lm = false; d = 11; y = 5195; m = 4; lm = false; d = 6; l_date.Set(y, m, lm, d); old_hl = l_date; rd = old_hl.Fixed(); g = rd.Gregorian(); out << "Old hindu lunar date: " << old_hl << " => rd: " << rd << std::endl << " Gregorian date: " << g << std::endl << std::endl; y = 1968; m = 5; d = 15; date.Set(y, m, d); g = date; rd = g.Fixed(); old_hl = rd.OldHinduLunar(); out << " Gregorian: " << g << " Old hindu lunar: " << old_hl << std::endl << std::endl; y = 5069; m = 2; lm = false; d = 19; l_date.Set(y, m, lm, d); old_hl = l_date; rd = old_hl.Fixed(); g = rd.Gregorian(); out << " Old hindu solar: " << old_hl << " Gregorian: " << g << std::endl << std::endl; #endif #endif #if 0 // old hindu lunisolar calendar calOldHinduLunar oldHL; rd = -214193; rd = 764652; oldHL = rd.OldHinduLunar(); out << "rd: " << rd << " => old hindu lunar: " << oldHL << std::endl << std::endl; bool lm; calDateOldHinduLunar l_date; y = 2515; m = 6; lm = false; d = 11; y = 5195; m = 4; lm = false; d = 6; l_date.Set(y, m, lm, d); oldHL = l_date; rd = oldHL.Fixed(); out << "Old hindu lunar date: " << oldHL << " => rd: " << rd << std::endl << std::endl; #endif #if 0 // data for Amogh to test his Java code std::cout << " Gregorian Date Rata Die" << std::endl; y = -1900; m = 12; d = 5; date.Set(y, m, d); g = date; rd = g.Fixed(); std::cout << " " << g << " " << rd << std::endl; y = 1968; m = 5; d = 15; date.Set(y, m, d); g = date; rd = g.Fixed(); std::cout << " " << g << " " << rd << std::endl; y = 1994; m = 3; d = 1; date.Set(y, m, d); g = date; rd = g.Fixed(); std::cout << " " << g << " " << rd << std::endl; y = -586; m = 7; d = 24; date.Set(y, m, d); g = date; rd = g.Fixed(); std::cout << " " << g << " " << rd << std::endl; y = 2004; m = 9; d = 16; date.Set(y, m, d); g = date; rd = g.Fixed(); std::cout << " " << g << " " << rd << std::endl; #endif } catch (anException e) { out << std::endl << e << std::endl; } // stop the clock and display cpu time clock.Stop(); clock.Display(); // write a closure message and finish the program out << std::endl << "Program <" << prg_name << "> completed successfully :-)" << std::endl; return 0; }