@REM Copyright by The HDF Group.
@REM Copyright by the Board of Trustees of the University of Illinois.
@REM All rights reserved.
@REM
@REM This file is part of HDF5.  The full HDF5 copyright notice, including
@REM terms governing use, modification, and redistribution, is contained in
@REM the files COPYING and Copyright.html.  COPYING can be found at the root
@REM of the source code distribution tree; Copyright.html can be found at the
@REM root level of an installed copy of the electronic HDF5 document set and
@REM is linked from the top-level documents page.  It can also be found at
@REM http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
@REM access to either file, you may request a copy from help@hdfgroup.org.

@echo off

::This batch file is for h5diff tests.
::Usage
:: difftest release  -- release static version
:: difftest debug  -- debug static version
:: difftest release dll -- release dll version
:: difftest debug dll -- debug dll version
:: Written By: Fang GUO
:: Date      : Jan. 12, 2006

:: Track total number of testing errors
   set /A totalerr=0
   set /A totalskip=0

::**********************************************
:: Generate a new temp directory for test h5diff
::**********************************************

:: Make a tempory directory for difftest
		mkdir temptest

::****************************************************
:: Set the Environment Variables & Change Dir to .EXE
::****************************************************

		:: The first incoming parameter should be configuration (debug or release)
		   set p1=%1
		:: The second parameter should be the types of library (dll or blank)
		   set p2=%2
			
    :: Set up some variables for convenience
       :: tempResults will contain the tests results temporarily
       set tempResults=difftest%p2%_%p1%.txt
       :: exefile will contain the file name of the executable file
       set exefile=h5diff%p2%
       :: tooltest is the sub-batch file which will be called by tool test
       set tooltest=..\..\tooltest
       ::Handle the expected file and the actual output file
       ::ln is the total line numbers to be deleted from the actual output
       set ln=1
       ::ln_exp is the total line numbers to be deleted from the expected output
			 set ln_exp=4
       
       :: NOTE1
       ::Set some variables to contain .h5 file and its path for convenience
       ::When you add new h5diff tests, check if the .h5 files is inside this for loop.
       ::For example, if you will add a new h5diff test using hdf5\tools\testfiles\file9.h5
       ::You need to add "9" after 8 or somewhere inside the ()
       ::The testing file names have been renamed. The following lines are not valid.
       :: for %%v in (1 2 3 4 5 6 7 8) do set file%%v=..\..\testfiles\file%%v.h5     
       set file1=..\..\testfiles\h5diff_basic1.h5
       set file2=..\..\testfiles\h5diff_basic2.h5
       set file3=..\..\testfiles\h5diff_types.h5
       set file4=..\..\testfiles\h5diff_dtypes.h5
       set file5=..\..\testfiles\h5diff_attr1.h5
       set file6=..\..\testfiles\h5diff_attr2.h5
       set file7=..\..\testfiles\h5diff_dset1.h5
       set file8=..\..\testfiles\h5diff_dset2.h5
       set file9=..\..\testfiles\h5diff_hyper1.h5
       set file10=..\..\testfiles\h5diff_hyper2.h5
       ::Create the file to contain the tests output
       type nul > %tempResults%
       
       ::Change directory to the directory where the .exe file is located
       cd h5diff%p2%\%p1%

::*********************************************
:: Test each function by calling TOOLTEST.BAT
::*********************************************
::USAGE of difftest.bat
::1. Set flag
::2. Call batch file tooltest.bat followed with the expected file name
::3. Example
::If we want to test h5diff ..\..\testfiles\file1.h5 ..\..\testfiles\file2.h5 g1/dset1 g1/dset2
::At first, we need to set the flag like
::set flag=%file1% %file2% g1/dset1 g1/dset2
::Secondly, we call batch file tooltest.bat by
::call %tooltest% h5diff_12.txt

echo. 
echo.****************************************************
echo.       H5diff%2 %1   T E S T S            
echo.****************************************************
 
::--------------
::Common usage
::--------------

::1.0
set flag=-h
call %tooltest% h5diff_10.txt 

::1.1 normal mode
set flag=%file1% %file2%
call %tooltest% h5diff_11.txt 

::1.2 normal mode with objects
set flag=%file1% %file2% g1/dset1 g1/dset2
call %tooltest% h5diff_12.txt   

::1.3 report mode
set flag=%file1% %file2% -r
call %tooltest% h5diff_13.txt 
 
::1.4 report  mode with objects
set flag=%file1% %file2% -r g1/dset1 g1/dset2
call %tooltest% h5diff_14.txt 
 
::1.5 with -d
set flag=%file1% %file2% -r -d 5 g1/dset3 g1/dset4
call %tooltest% h5diff_15.txt 

::1.6.1 with -p (int)
set flag=%file1% %file1% -v -p 0.02 g1/dset5 g1/dset6
call %tooltest% h5diff_16_1.txt 

:: Commented out in unix test script (due to cross-platform errors)
::1.6.2 with -p (unsigned long_long)
:: set flag=%file1% %file1% -v -p 0.02 g1/dset7 g1/dset8
:: call %tooltest% h5diff_16_2.txt 

::1.6.2 with -p (unsigned long_long)
set flag=%file1% %file1% -v -p 0.02 g1/dset9 g1/dset10
call %tooltest% h5diff_16_3.txt 

::1.7 verbose mode
set flag=%file1% %file2% -v
call %tooltest% h5diff_17.txt 
 
::1.8 quiet mode 
set flag=%file1% %file2% -q
call %tooltest% h5diff_18.txt 

::---------------------
::Not Comparable Types
::---------------------

::2.0
set flag=%file3% %file3% -v dset g1
call %tooltest% h5diff_20.txt 

::2.1
set flag=%file3% %file3% -v dset l1
call %tooltest% h5diff_21.txt 
 

::2.2
set flag=%file3% %file3% -v dset t1
call %tooltest% h5diff_22.txt  
 

::2.3
set flag=%file3% %file3% -v g1 g1
call %tooltest% h5diff_23.txt 

::2.4
set flag=%file3% %file3% -v t1 t1
call %tooltest% h5diff_24.txt  
 
::2.5
set flag=%file3% %file3% -v l1 l1
call %tooltest% h5diff_25.txt  

::2.6
set flag=%file3% %file3% -v g1 g2
call %tooltest% h5diff_26.txt 

::2.7
set flag=%file3% %file3% -v t1 t2
call %tooltest% h5diff_27.txt  
 
::2.8
set flag=%file3% %file3% -v l1 l2
call %tooltest% h5diff_28.txt  



::-------------
:: Dataset types
:: -------------

::5.0
set flag=%file4% %file4% -v dset0a dset0b
call %tooltest% h5diff_50.txt  
 

::5.1
set flag=%file4% %file4% -v dset1a dset1b
call %tooltest% h5diff_51.txt  
 

::5.2
set flag=%file4% %file4% -v dset2a dset2b
call %tooltest% h5diff_52.txt 
 

::5.3
set flag=%file4% %file4% -v dset3a dset4b
call %tooltest% h5diff_53.txt 
 

::5.4
set flag=%file4% %file4% -v dset4a dset4b
call %tooltest% h5diff_54.txt 
 

::5.5
set flag=%file4% %file4% -v dset5a dset5b
call %tooltest% h5diff_55.txt  
 

::5.6
set flag=%file4% %file4% -v dset6a dset6b
call %tooltest% h5diff_56.txt 
 

::5.7
set flag=%file4% %file4% -v dset7a dset7b
call %tooltest% h5diff_57.txt  
 

::5.8 long_long test; different format of long_long print  in Linux and IRIX
set flag=%file7% %file8% -v refreg
call %tooltest% h5diff_58.txt

:: --------------
:: Error messages
:: --------------

::6.0: Check if the command line number of arguments is less than 3
set flag=%file1%
call %tooltest% h5diff_600.txt 
 
::6.1: Check for invalid options
set flag=%file1% %file2% -x
call %tooltest% h5diff_601.txt   

:: ----
:: -d 
:: ----

::6.2: no value
set flag=%file1% %file2% -d g1/dset3 g1/dset4
call %tooltest% h5diff_602.txt  
 

::6.3: negative value
set flag=%file1% %file2% -d -4 g1/dset3 g1/dset4
call %tooltest% h5diff_603.txt  
 

::6.4: zero
set flag=%file1% %file2% -d 0 g1/dset3 g1/dset4
call %tooltest% h5diff_604.txt  
 

::6.5: non number
set flag=%file1% %file2% -d u g1/dset3 g1/dset4
call %tooltest% h5diff_605.txt  
 

::6.6: hexadecimal
set flag=%file1% %file2% -d 0x1 g1/dset3 g1/dset4
call %tooltest% h5diff_606.txt 
 

::6.7: string
set flag=%file1% %file2% -d "1" g1/dset3 g1/dset4
call %tooltest% h5diff_607.txt  
 

::6.8: repeated option
set flag=%file1% %file2% -d 1 -d 2 g1/dset3 g1/dset4
call %tooltest% h5diff_608.txt  
 

::6.9: number larger than biggest difference
set flag=%file1% %file2% -d 200 g1/dset3 g1/dset4
call %tooltest% h5diff_609.txt  
 

::6.10: number smaller than smallest difference
set flag=%file1% %file2% -d 1 g1/dset3 g1/dset4
call %tooltest% h5diff_610.txt  
 
::---
::-p
::---


::6.11: no value
set flag=%file1% %file2% -r -p g1/dset3 g1/dset4
call %tooltest% h5diff_611.txt  
 


::6.12: negative value
set flag=%file1% %file2% -p -4 g1/dset3 g1/dset4
call %tooltest% h5diff_612.txt  
 


::6.13: zero
set flag=%file1% %file2% -p 0 g1/dset3 g1/dset4
call %tooltest% h5diff_613.txt  
 


::6.14: non number
set flag=%file1% %file2% -p u g1/dset3 g1/dset4
call %tooltest% h5diff_614.txt  
 

::6.15: hexadecimal
set flag=%file1% %file2% -p 0x1 g1/dset3 g1/dset4
call %tooltest% h5diff_615.txt  
 

::6.16: string
set flag=%file1% %file2% -p "0.21" g1/dset3 g1/dset4
call %tooltest% h5diff_616.txt  
 

::6.17: repeated option
set flag=%file1% %file2% -p 0.21 -p 0.22 g1/dset3 g1/dset4
call %tooltest% h5diff_617.txt  
 

::6.18: number larger than biggest difference
set flag=%file1% %file2% -p 2 g1/dset3 g1/dset4
call %tooltest% h5diff_618.txt  
 

::6.19: number smaller than smallest difference
set flag=%file1% %file2% -p 0.005 g1/dset3 g1/dset4
call %tooltest% h5diff_619.txt  
 

::---
::-n 
::---

::6.20: no value
set flag=%file1% %file2% -n g1/dset3 g1/dset4
call %tooltest% h5diff_620.txt  
 

::6.21: negative value
set flag=%file1% %file2% -n -4 g1/dset3 g1/dset4
call %tooltest% h5diff_621.txt  
 

::6.22: zero
set flag=%file1% %file2% -n 0 g1/dset3 g1/dset4
call %tooltest% h5diff_622.txt  
 

::6.23: non number
set flag=%file1% %file2% -n u g1/dset3 g1/dset4
call %tooltest% h5diff_623.txt  
 

::6.24: hexadecimal
set flag=%file1% %file2% -n 0x1 g1/dset3 g1/dset4
call %tooltest% h5diff_624.txt  
 

::6.25: string
set flag=%file1% %file2% -n "2" g1/dset3 g1/dset4
call %tooltest% h5diff_625.txt  
 


::6.26: repeated option
set flag=%file1% %file2% -n 2 -n 3 g1/dset3 g1/dset4
call %tooltest% h5diff_626.txt  
 

::6.27: number larger than biggest difference
set flag=%file1% %file2% -n 200 g1/dset3 g1/dset4
call %tooltest% h5diff_627.txt  
 

::6.28: number smaller than smallest difference
set flag=%file1% %file2% -n 1 g1/dset3 g1/dset4
call %tooltest% h5diff_628.txt  
 

::6.29:  non valid %files

set flag=file1.h6      file2.h6
call %tooltest% h5diff_629.txt  

::--------------
::7.  attributes
::--------------

set flag=%file5% %file6% -v
call %tooltest% h5diff_70.txt  


::-------------------------
::8.  all dataset datatypes
::-------------------------

set flag=%file7% %file8% -v
call %tooltest% h5diff_80.txt  
 

::-----------------------------
::9. compare a %file with itself
::-----------------------------

set flag=%file1% %file1%
call %tooltest% h5diff_90.txt  

::-----------------------------
::10. read by hyperslab, print indexes
::-----------------------------

set flag=%file9% %file10% -v
call %tooltest% h5diff_100.txt  

::-----------------------------
::11. floating point comparison
::-----------------------------

REM Not tested on Windows due to difference in formatting of scientific notation
REM set flag=%file1% %file1% /g1/d1  g1/d2  -v
REM call %tooltest% h5diff_101.txt  

REM set flag=%file1% %file1% /g1/fp1 g1/fp2 -v
REM call %tooltest% h5diff_102.txt  

::Change directory to hdf5\tools
cd ..\..

::Check if any of tests failed or skiped for the time being
echo.
if "%totalerr%"=="0" (
echo. All of the %exefile% %p1% Tests Passed!
echo. All of the %exefile% %p1% Tests Passed! >> %tempResults%
) else (
echo. %exefile% %p1% Tests Finished with %totalerr% Errors!  
echo. %exefile% %p1% Tests Finished with %totalerr% Errors!>> %tempResults%
)

if not "%totalskip%"=="0" (
echo. %totalskip% Tests in total Skiped!  >> %tempResults%
echo. %totalskip% Tests in total Skiped!
find "SKIPED" %tempResults% | more +2
)

::NOTE1 CLEAN
::Clean up Environment Variables
for %%i in (p1 p2 tempResults exefile tooltest ln ln_exp totalskip totalerr) do set %%i=
for %%v in (1 2 3 4 5 6 7 8) do set file%%v=
set flag=

::Clean up Temporary Files
rmdir /s/q temptest


