=head1 NAME test_strings_and_dates.pl - Test the StringUtil and DateUtil packages. =head1 SYNOPSIS Test the Pitonyak::StringUtil and Pitonyak::DateUtil packages. From the command line, type the following: perl -w test_strings_and_dates.pl This should indicate that it passed. =head1 COPYRIGHT Copyright 1998-2002, Andrew Pitonyak (perlboy@pitonyak.org) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 Modification History =head2 March 13, 1998 Version 1.00 First release =head2 September 10, 2002 Version 1.01 Changed internal documentation to POD documentation. =cut use Pitonyak::StringUtil qw(num_int_digits num_with_leading_zeros compact_space trim_space trans_blank); use Pitonyak::DateUtil; use strict; #************************************************************ #** ** #** Input: None ** #** ** #** Output: 0 if test fails, non-zero otherwise. ** #** ** #** Notes: ** #** ** #************************************************************ sub test_StringUtil { my $rc = 1; my ( @data1, @data2, @data3, @data4, @tmp1 ); my $index; my $moduleOK = 1; my $tmp; my $i; my $day1; print "(" . Pitonyak::StringUtil::trans_blank( "", "" ) . ")"; print "(" . Pitonyak::StringUtil::trans_blank( "", "X" ) . ")"; print "(" . Pitonyak::StringUtil::trans_blank( "X", "Y" ) . ")"; print "(" . Pitonyak::StringUtil::trans_blank( "", "00" ) . ")\n"; if ( Pitonyak::StringUtil::trans_blank( "", "" ) ne "" || Pitonyak::StringUtil::trans_blank( "", "X" ) ne "X" || Pitonyak::StringUtil::trans_blank( "X", "Y" ) ne "X" || Pitonyak::StringUtil::trans_blank( "", "00" ) ne "00" ) { $rc = 0; print "Pitonyak::StringUtil::trans_blank() failed\n"; } else { print "passed Pitonyak::StringUtil::trans_blank()\n"; } $moduleOK = 1; @data1 = ( "here", " there ", " here and there ", "but not", " over there today" ); @data2 = ( "here", "there", "here and there", "but not", "over there today" ); compact_space(@data1); for ( $i = 0 ; $i < scalar(@data2) ; ++$i ) { if ( $data1[$i] ne $data2[$i] ) { $rc = 0; $moduleOK = 0; print "compact_space() failed at index $i data1 = ($data1[$i]), data2 = ($data2[$i])\n"; } } if ( $moduleOK == 1 ) { print "passed compact_space()\n"; } $moduleOK = 1; @data1 = ( "here", " there ", " here and there ", "but not", " over there today" ); @data2 = ( "here", "there", "here and there", "but not", "over there today" ); trim_space(@data1); for ( $i = 0 ; $i < scalar(@data2) ; ++$i ) { if ( $data1[$i] ne $data2[$i] ) { $rc = 0; $moduleOK = 0; print "trim_space() failed at index $i data1 = ($data1[$i]), data2 = ($data2[$i])\n"; } } if ( $moduleOK == 1 ) { print "passed trim_space()\n"; } $moduleOK = 1; @data1 = ( -10001, -10000, -9999, -5000, -101, -100, -99, -1, 0, 1, 9, 10, 11, 999, 1000, 1001 ); @data2 = ( 6, 6, 5, 5, 4, 4, 3, 2, 1, 1, 1, 2, 2, 3, 4, 4 ); for ( $i = 0 ; $i < scalar(@data2) ; ++$i ) { if ( num_int_digits( $data1[$i] ) != $data2[$i] ) { $rc = 0; $moduleOK = 0; print "num_int_digits() failed at index $i data1 = ($data1[$i]), data2 = ($data2[$i])\n"; } } if ( $moduleOK == 1 ) { print "passed num_int_digits()\n"; } $moduleOK = 1; @data1 = ( -5, -4, -3, -2, -1, 5, 4, 3, 2, 1, 0, 4, 3, 2, 1 ); @data2 = ( -101, -103, -199, -201, -100, -101, -103, -199, -201, -100, 2, 103, 199, 201, 100 ); @data3 = ( "-0101", "-103", "-99", "-1", "-", "00101", "0103", "199", "01", "0", "", "0103", "199", "01", "0" ); for ( $i = 0 ; $i < scalar(@data2) ; ++$i ) { $tmp = num_with_leading_zeros( $data1[$i], $data2[$i] ); if ( $tmp ne $data3[$i] ) { $rc = 0; $moduleOK = 0; print "num_with_leading_zeros() failed at index $i data1 = ($data1[$i]), data2 = ($data2[$i]), data3 = ($data3[$i]) != ($tmp)\n"; } } if ( $moduleOK == 1 ) { print "passed num_with_leading_zeros()\n"; } $moduleOK = 1; @data1 = ( "YYYYMMDDhhmmss", "YYYMMDDhhmmss", "YYMMDDhhmmss", "YYYYMMDDhhmmss", "YYYMMDDhhmmss", "YYMMDDhhmmss", "YMMDDhhmmss", "YY-WWW-DD" ); @data2 = ( "YYYY:MM:DD:hh:mm.ss", "\\DYYYMMDDhhmmss", "\\dayYYMMyDDhhmmss", "YYYYxxzzMMDDhhmmss", "YYYMMDDhhmmssxtxtxt", "YYMMDDhh::::mmss", "YzzzzzMMDDhhmmss", "YY-MMM-DD" ); for ( $i = 0 ; $i < scalar(@data2) ; ++$i ) { my $now = time(); my $tmp1 = time_date_str( $data1[$i], $now ); if ( time_date_str_to_int( $data1[$i], time_date_str( $data1[$i], $now ) ) != time_date_str_to_int( $data2[$i], time_date_str( $data2[$i], $now ) ) ) { print "time_date_str() -> time_date_str_int() does not invert for $data1[$i] and $data2[$i] on iteration $i\n"; $moduleOK = 0; $rc = 0; } } if ( $moduleOK == 1 ) { print "passed time_date_str(), invert_time_date_str(), and time_date_str_to_int()\n"; } $moduleOK = 1; # # and now for some Y2K testing and other stuff. Some errors should be encountered # my $day2 = time_date_str_to_int( "YYYYMMDDhhmmss", "19991229031227" ); @data1 = ( 99, 99, 99, 100, 100, 100, 100 ); @data2 = ( 11, 11, 11, 0, 0, 0, 0 ); @data3 = ( 29, 30, 31, 1, 2, 3, 4 ); @data4 = ( "YYYYMMDDhhmmss", "YYYMMDDhhmmss", "YYMMDDhhmmss" ); foreach my $fmt (@data4) { $day1 = $day2; for ( $i = 0 ; $i < scalar(@data1) ; ++$i ) { my $tmp1 = time_date_str( $fmt, $day1 ); #print "Just took $day1 ==> $tmp1 with fmt = $fmt\n"; @tmp1 = invert_time_date_str( $fmt, $tmp1 ); if ( $tmp1[0] != 27 ) { print "seconds wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[1] != 12 ) { print "minutes wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[2] != 3 ) { print "hours wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[5] != $data1[$i] ) { print "year wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[4] != $data2[$i] ) { print "month ($tmp1[4]) wrong, expected ($data2[$i]) after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[3] != $data3[$i] ) { print "day ($tmp1[3]) wrong, expected ($data3[$i]) after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( time_date_str_to_int( $fmt, time_date_str( $fmt, $day1 ) ) != $day1 ) { print "time_date_str_to_int($fmt, time_date_str($fmt, $day1)) != $day1 \n"; $moduleOK = 0; $rc = 0; } $day1 += 60 * 60 * 24; } } if ( $moduleOK == 1 ) { print "passed a few Y2K tests\n"; } else { print "failed a few Y2K tests\n"; $moduleOK = 1; } $day2 = time_date_str_to_int( "YYYYMMDDhhmmss", "20000227031227" ); @data1 = ( 100, 100, 100, 100, 100, 100, 100 ); @data2 = ( 01, 01, 01, 02, 02, 02, 02 ); @data3 = ( 27, 28, 29, 1, 2, 3, 4 ); @data4 = ( "YYYYMMDDhhmmss", "YYYMMDDhhmmss", "YYMMDDhhmmss" ); foreach my $fmt (@data4) { $day1 = $day2; for ( $i = 0 ; $i < scalar(@data1) ; ++$i ) { my $tmp1 = time_date_str( $fmt, $day1 ); #print "Just took $day1 ==> $tmp1 with fmt = $fmt\n"; @tmp1 = invert_time_date_str( $fmt, $tmp1 ); if ( $tmp1[0] != 27 ) { print "seconds wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[1] != 12 ) { print "minutes wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[2] != 3 ) { print "hours wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[5] != $data1[$i] ) { print "year wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[4] != $data2[$i] ) { print "month ($tmp1[4]) wrong, expected ($data2[$i]) after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( $tmp1[3] != $data3[$i] ) { print "day ($tmp1[3]) wrong, expected ($data3[$i]) after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $moduleOK = 0; $rc = 0; } if ( time_date_str_to_int( $fmt, time_date_str( $fmt, $day1 ) ) != $day1 ) { print "time_date_str_to_int($fmt, time_date_str($fmt, $day1)) != $day1 \n"; $moduleOK = 0; $rc = 0; } $day1 += 60 * 60 * 24; } } if ( $moduleOK == 1 ) { print "passed a few Y2K leap year tests\n"; } else { print "failed a few Y2K leap year tests\n"; $moduleOK = 1; } $day2 = time_date_str_to_int( "YYYYMMDDhhmmss", "20371229031227" ); @data1 = ( 137, 137, 137, 138, 138, 138, 138 ); @data2 = ( 11, 11, 11, 00, 00, 00, 00 ); @data3 = ( 29, 30, 31, 1, 2, 3, 4 ); @data4 = ( "YYYYMMDDhhmmss", "YYYMMDDhhmmss", "YYMMDDhhmmss" ); foreach my $fmt (@data4) { $day1 = $day2; my $this_ok = 1; print "\nReady to convert some times around while incrementing by one day\n"; for ( $i = 0 ; $i < scalar(@data1) && $this_ok ; ++$i ) { my $tmp1 = time_date_str( $fmt, $day1 ); print "Just took $day1 seconds ==> $tmp1 with fmt = $fmt\n"; @tmp1 = invert_time_date_str( $fmt, $tmp1 ); if ( $tmp1[0] != 27 ) { print "seconds wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $this_ok = 0; } if ( $tmp1[1] != 12 ) { print "minutes wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $this_ok = 0; } if ( $tmp1[2] != 3 ) { print "hours wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $this_ok = 0; } if ( $tmp1[5] != $data1[$i] ) { print "year wrong after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $this_ok = 0; } if ( $tmp1[4] != $data2[$i] ) { print "month ($tmp1[4]) wrong, expected ($data2[$i]) after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $this_ok = 0; } if ( $tmp1[3] != $data3[$i] ) { print "day ($tmp1[3]) wrong, expected ($data3[$i]) after invert_time_date_str($fmt, time_date_str($fmt, $day1))\n"; $this_ok = 0; } if ( time_date_str_to_int( $fmt, time_date_str( $fmt, $day1 ) ) != $day1 ) { print "time_date_str_to_int($fmt, time_date_str($fmt, $day1)) != $day1 \n"; $this_ok = 0; } $day1 += 60 * 60 * 24; } if ( $this_ok == 0 ) { $moduleOK = 0; } } if ( $moduleOK == 1 ) { print "unexpectedly passed a few year 2038 tests\n"; } else { print "failed a few year 2038 tests as expected\n"; $moduleOK = 1; #??$rc = 0; } return $rc; } my $rc = test_StringUtil(); print "Passed\n" if $rc == 1; print "Failed\n" if $rc == 0;