/* t4conv.c (c)Copyright Sequiter Software Inc., 1990-1993. All rights reserved.

   Tests Code Base conversion routines.
   */

#include "d4all.h"
#ifdef __TURBOC__
#pragma hdrstop
#endif
#include "t4test.h"

CODE4 cb;

#ifndef S4LANGUAGE
#define MONDAY "Monday"              /* English */
#define OCTOBER "October"
#define OCTOBER8 "Oct 08, 1990"
#else
#ifdef S4GERMAN
#define MONDAY "Montag"           
#define OCTOBER "Oktober"
#define OCTOBER8 "Okt 08, 1990"
#endif
#ifdef S4FRENCH
#define MONDAY "Lundi"
#define OCTOBER "Octobre"
#define OCTOBER8 "Oct 08, 1990"
#endif
#endif

static int do_test()
{
  char encde[10], result[20], date[8] ;
  double num ;

#ifndef S4UNIX
  /*   conversion tests  */
  num = atof("108.625");
  if ( num != 108.625 )
    t4severe( t4err_general, "01" ) ;
#endif

  c4dtoa45( 190457.311, encde, 8, 1 ) ;
  if ( strncmp( "190457.3", encde, 8 ) !=0 )
    t4severe( t4err_general, "02" ) ;

  if ( c4atoi( "12", 2 ) != 12 )
    t4severe( t4err_general, "03" ) ;

  if ( c4atol( "1234567", 5 ) != 12345 )
    t4severe( t4err_general, "04" ) ;

  c4encode( encde, "123456", "AA%BB*CC", "CCAABB");
  if ( strcmp( encde, "34%56*12" ) != 0)
    t4severe( t4err_general, "05" ) ;

  c4ltoa45( (long) 10, encde, 8) ;
  if ( strcmp( encde, "      10") != 0 )
    t4severe( t4err_general, "06" ) ;

  c4ltoa45( (long) 10, encde, -8);
  if ( strcmp( encde, "00000010") != 0 )
    t4severe( t4err_general, "07" ) ;

  strcpy( encde, "tESTiNG 4");

  c4lower(encde);
  if ( strcmp( encde, "testing 4") != 0 )
    t4severe( t4err_general, "08" ) ;

  c4upper(encde);
  if ( strcmp( encde, "TESTING 4") != 0 )
    t4severe( t4err_general, "09" ) ;

  /*   date tests   */

  date4format_mdx2("19901225", &num) ;
  date4assign( date, (long) num ) ;
  if ( strncmp( "19901225" , date, sizeof(date) ) != 0 )
    t4severe( t4err_date, "10" ) ;

  memcpy( date, "19901008", sizeof(date) );  /*Monday,October 8, 1990*/

  date4format(date, result, "YY.MM.DD");
  if ( strcmp( result, "90.10.08")  != 0 )
    t4severe( t4err_date, "11" ) ;

  date4format(date, result, "CCYY.MM.DD");
  if ( strcmp( result, "1990.10.08")  != 0 )
    t4severe( t4err_date, "12" ) ;

  date4format(date, result, "MM/DD/YY");
  if ( strcmp( result, "10/08/90")  != 0 )
    t4severe( t4err_date, "13" ) ;

  date4format(date, result, "MMM DD, CCYY");
  if ( strcmp( result, OCTOBER8 )  != 0 )
    t4severe( t4err_date, "14" ) ;

#ifndef S4LANGUAGE
  date4format(date, result, "MMMMMMMM DD,YY");
  if ( strcmp( result, "October  08,90" )  != 0 )
    t4severe( t4err_date, "15" ) ;

  date4format(date, result, "MMMMMMM DD,YY");
  if ( strcmp( result, "October 08,90" )  != 0 )
    t4severe( t4err_date, "16" ) ;

  date4format(date, result, "MMMMMM DD,YY");
  if ( strcmp( result, "Octobe 08,90" )  != 0 )
    t4severe( t4err_date, "17" ) ;

  date4format(date, result, "DD-MMMMMM,CC");
  if ( strcmp( result, "08-Octobe,19" )  != 0 )
    t4severe( t4err_date, "18" ) ;

  date4format(date, result, "YYCC,DD,MMMM");
  if ( strcmp( result, "9019,08,Octo" )  != 0 )
    t4severe( t4err_date, "19" ) ;

  date4format(date, result, "DD MMMMMMMMMMMM");
  if ( strcmp( result, "08 October     " )  != 0 )
    t4severe( t4err_date, "20" ) ;
#endif

  date4format("        ", result, "MMM DD, CCYY");
  if ( strcmp( result, "      ,     " )  != 0 )
    t4severe( t4err_date, "21" ) ;

  strcpy( result, date4cdow(date) ) ;
  if ( strcmp( result, MONDAY )  != 0 )
    t4severe( t4err_date, "22" ) ;

  strcpy( result, date4cmonth( date ) ) ;
  if ( strcmp( result, OCTOBER )  != 0 )
    t4severe( t4err_date, "23" ) ;

  if ( date4day(date) != 8 )
    t4severe( t4err_date, "24" ) ;

  if ( date4month(date) != 10 )
    t4severe( t4err_date, "25" ) ;

  if ( date4dow(date) != 2 )
    t4severe( t4err_date, "26" ) ;

  date4format_mdx2(date, &num);
  if (  2448173.0 != num )
    t4severe( t4err_date, "27" ) ;

  if ( date4long(date) != 2448173 )
    t4severe( t4err_date, "28" ) ;

  date4init( date, "Nov 07/90", "MMM DD/YY");
  if ( strncmp( "19901107" , date, sizeof(date) ) != 0 )
    t4severe( t4err_date, "29" ) ;

  date4init( date, "08/07/1989", "MM/DD/CCYY");
  if ( strncmp( "19890807" , date, sizeof(date) ) != 0 )
    t4severe( t4err_date, "30" ) ;

  date4init( date, "08/07/1963", "DD/MM/CCYY");
  if ( strncmp( "19630708" , date, sizeof(date) ) != 0 )
    t4severe( t4err_date, "31" ) ;

  return 0;
}


static int  test_with_mem_check( D4DISPLAY *display )

{
  d4init( &cb ) ;

  cb.hWnd = (unsigned) display->hWnd ;
#ifdef S4DLL
  cb.hInst = (unsigned) display->hInst ;
#endif


  if ( do_test() )
    return 1 ;

#ifdef S4DEBUG
  mem4check_memory() ;
  d4init_undo( &cb ) ;

#ifndef DLL
  mem4reset() ;
  if ( mem4free_check( 100 ) != 0 )
    t4severe( t4err_memory, "32" ) ;
#endif
#else
  d4init_undo( &cb ) ;
#endif
  return 0 ;
}


int S4FUNCTION t4test( D4DISPLAY *disp )
{
  if ( test_with_mem_check(disp) )
    t4severe( t4err_general, "33" ) ;
  if ( test_with_mem_check(disp) )
    t4severe( t4err_general, "34" ) ;

  d4display_str( disp, "T4CONV:   SUCCESS", 1 ) ;
  d4display_str( disp, "", 1 ) ;
  return 1 ;
}