/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
 * Use, modification and distribution is subject to the 
 * Boost Software License, Version 1.0. (See accompanying
 * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
 * Author: Jeff Garland 
 */

#include "boost/date_time/gregorian/greg_month.hpp"
#include "boost/date_time/testfrmwk.hpp"
#include <iostream>


void 
test_month() 
{
  using namespace boost::gregorian;
  greg_month m1(Jan), m2(Feb), m3(Mar), m4(Apr), m5(May), m6(Jun);
  greg_month m7(Jul), m8(Aug), m9(Sep), m10(Oct), m11(Nov),m12(Dec);
  check("January  as_number", m1.as_number() == 1);
  check("December as_number", m12.as_number() == 12);
  check("Jan as Short String",  m1.as_short_string()  == std::string("Jan"));
  check("Feb as Short String",  m2.as_short_string()  == std::string("Feb"));
  check("Mar as Short String",  m3.as_short_string()  == std::string("Mar"));
  check("Apr as Short String",  m4.as_short_string()  == std::string("Apr"));
  check("May as Short String",  m5.as_short_string()  == std::string("May"));
  check("Jun as Short String",  m6.as_short_string()  == std::string("Jun"));
  check("Jul as Short String",  m7.as_short_string()  == std::string("Jul"));
  check("Aug as Short String",  m8.as_short_string()  == std::string("Aug"));
  check("Sep as Short String",  m9.as_short_string()  == std::string("Sep"));
  check("Oct as Short String",  m10.as_short_string() == std::string("Oct"));
  check("Nov as Short String",  m11.as_short_string() == std::string("Nov"));
  check("Dec as Short String",  m12.as_short_string() == std::string("Dec"));
  check("Jan as Long String",  m1.as_long_string()  == std::string("January"));
  check("Feb as Long String",  m2.as_long_string()  == std::string("February"));
  check("Mar as Long String",  m3.as_long_string()  == std::string("March"));
  check("Apr as Long String",  m4.as_long_string()  == std::string("April"));
  check("May as Long String",  m5.as_long_string()  == std::string("May"));
  check("Jun as Long String",  m6.as_long_string()  == std::string("June"));
  check("Jul as Long String",  m7.as_long_string()  == std::string("July"));
  check("Aug as Long String",  m8.as_long_string()  == std::string("August"));
  check("Sep as Long String",  m9.as_long_string()  == std::string("September"));
  check("Oct as Long String",  m10.as_long_string() == std::string("October"));
  check("Nov as Long String",  m11.as_long_string() == std::string("November"));
  check("Dec as Long String",  m12.as_long_string() == std::string("December"));
  //month m(5);

  //TODO can this support NAM? or check exception
  //  greg_month sm0(0);
  greg_month sm1(1);
  greg_month sm12(12);
  //check("check not a month value", sm0.as_short_string() == "NAM");
  check("short construction -- 1", 
        sm1.as_short_string() == std::string("Jan"));
  check("short construction -- 12", 
        sm12.as_short_string() == std::string("Dec"));
  check("month traits min", (greg_month::min)() == 1);
  check("month traits max", (greg_month::max)() == 12);

}

int
main() 
{
  test_month();
  return printTestStats();
}

