@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 h5repack tests
::Usage
:: repacktest release  -- release static version
:: repacktest debug  -- debug static version
:: repacktest release dll -- release dll version
:: repacktest debug dll -- debug dll version
:: Written By: Fang GUO
:: Date      : Jan. 12, 2006

::What is actually doing?
::Example case
::h5repack -i ..\..\testfiles\test_objs.h5  -o ..\..\temptest\out.test_objs.h5
::h5diff ..\..\testfiles\test_objs.h5 ..\..\temptest\out.test_objs.h5 > ..\..\temptest\temp.txt 2>&1
::fc ..\..\temptest\temp.txt temptest\notcomp.txt 
::if %ERRORLEVEL%==0 (
::   echo Testing h5repack test_objs.h5                                              PASSED >> ..\..\repacktest%2_%1.txt
::) else (
::   echo Testing h5repack test_objs.h5                                              FAILED >> ..\..\repacktest%2_%1.txt
::   more temp.txt >> ..\..\repacktest%2_%1.txt
::)



    :: We will check whether the SZIP library available includes encoder or not by 
		:: calling the szip encoder detecting executable file testh5repack_detect_szip(dll).exe
		:: and check the printed value.
		:: If the printed value is "yes", then the SZIP library has encoder, HDF5_SZIP_ENCODE will be set as 1.
		:: Otherwise,  HDF5_SZIP_ENCODE will be set as 0, and some tests will be skipped.

     FOR /F "delims=" %%a in ('testfiles\testh5repack_detect_szip%2\%1\testh5repack_detect_szip%2.exe') Do Set "Output=%%a"
     if "%Output%"=="yes" (
	   Set HDF5_SZIP_ENCODE=1
     )	else (
	   Set HDF5_SZIP_ENCODE=0
     )

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

::*******************************************************************
:: Generate a new temp directory for test h5repack and reference file
::*******************************************************************
		::Make a temporary directory for testing h5repack
    mkdir temptest
    
    :: Reference Files 
    :: After running h5repack with a input .h5 file, it will use 
    :: h5diff to compare the expected .h5 file with the output
    :: .h5 file generated by h5repack. The comparison results will be 
    :: one of the following two cases.

    :: Case 1: No difference between the expected .h5 and .h5 generated by h5repack file
    type nul > temptest\empty.txt
    
    ::Case 2: For test_objs.h5 and test_attr.h5, the output will be "Some objects 
    :: are not comparable", but actually there is no difference between 
    
		type nul > temptest\notcomp.txt
		echo -------------------------------->>temptest\notcomp.txt
		echo Some objects are not comparable>> temptest\notcomp.txt
		echo -------------------------------->>temptest\notcomp.txt
		echo Use -v for a list of objects.>> temptest\notcomp.txt
    
    :: Set two variables to contain the following two file names and paths
    set nodiff=..\..\temptest\empty.txt
    set notcomp=..\..\temptest\notcomp.txt

::****************************************************
:: 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 file name for the test results
       set tempResults=repacktest%2_%1.txt
    :: Set exe file name
       set exefile=h5repack%p2%
    :: Set a variable for the sub batch file tools\tooltest.bat
       set tooltest=..\..\tooltest
   
    :: Set Variables to contain the file name and path of input and output files for testing h5repack
       for %%v in (_fill _objs _attr _hlink _layout _early _szip _deflate _shuffle _fletcher _filters _nbit _soffset) do (
         set test%%v=..\..\testfiles\h5repack%%v.h5
         set output%%v=..\..\temptest\out.h5repack%%v.h5
       )
  
     :: Creat the file for saving the tests results
       type nul > %tempResults%

     :: Change to the direcotory where the .exe file is located
       cd h5repack%p2%\%p1%

::*********************************************
:: Test each function by calling TOOLTEST.BAT
::*********************************************

echo. 
echo.****************************************************
echo.       h5repack%2 %1   T E S T S            
echo.****************************************************

:: STARTING COMMENTS
::Basic Usage:
::1. Set flag
::2. Call batch file tooltest.bat followed with the expected file name
::3. Example
::If we want to test 
::h5repack -i ..\..\testfiles\test_objs.h5  -o ..\..\temptest\out.test_objs.h5
::At first, we need to set the flag like
::set flag=-i %test_objs% -o %output1%
::Secondly, we call batch file tooltest.bat followed by one of reference files
::call %tooltest% %test_objs% %notcomp%

:: Using Filters (Zlib, SZIP)
::1. Set flag
::2. Call batch file tooltest.bat followed with the expected file name, zlib\szip
::3. Example
::If we want to test 
::h5repack -i ..\..\testfiles\test_layout.h5  -o ..\..\temptest\out.test_layout.h5 f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10

::At first, we need to set the flag like
::set flag=-i %test_layout% -o %output_layout% f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10

::Secondly, we call batch file tooltest.bat followed by one of reference files and szip
::call %tooltest% %test_layout% %nodiff% szip

::Similarly, if you are using zlib, replace "szip" with "zlib" when calling %tooltest%
::If you are using both zlib and szip, replace "szip" with "zlib szip" when calling %tooltest%
::The order of "zlib szip" does matter.

::Skip Tests 
::Put "skip" after the reference file, like the following
::set flag=-i %test_scaleoffset% -o %output_scaleoffset% -f dset_none:SOFF=31,IN
::call %tooltest% %test_scaleoffset% %nodiff% skip
:: END COMMENTS

::--------------
:: test0.h5
::--------------
set flag=-i %test_fill% -o %output_fill%
call %tooltest% %test_fill% %nodiff% 


::This case will be used as an example case for 
::illustration purpose inside tooltest.bat for repacktest
::--------------
:: test_objs.h5
::--------------

:: Actually we are doing:
:: set flag=-i ..\..\testfiles\test_objs.h5  -o ..\..\temptest\out.test_objs.h5
:: call ..\..\tooltest ..\..\testfiles\test_objs.h5 ..\..\temptest\notcomp.txt

set flag=-i %test_objs% -o %output_objs%
call %tooltest% %test_objs% %notcomp% 


::--------------
:: test2.h5
::--------------
set flag=-i %test_attr% -o %output_attr%
call %tooltest% %test_attr% %notcomp%  

::--------------
:: test3.h5
::--------------
set flag=-i %test_hlink% -o %output_hlink%
call %tooltest% %test_hlink% %nodiff%  
 

::--------------
:: test_layout.h5
::--------------
set flag=-i %test_layout% -o %output_layout%
call %tooltest% %test_layout% %nodiff% 

::--------------
:: test_early.h5
::--------------
set flag=-i %test_early% -o %output_early%
call %tooltest% %test_early% %nodiff% 

::****************************************************************
:: use test_layout.h5 to write some filters  (this file has  no filters)
::****************************************************************

::--------------------------- 
::gzip with individual object
::---------------------------
set flag=-i %test_layout% -o %output_layout% -f dset1:GZIP=1  -l dset1:CHUNK=20x10
call %tooltest% %test_layout% %nodiff% zlib

::-------------
::gzip for all 
::-------------
set flag=-i %test_layout% -o %output_layout% -f GZIP=1
call %tooltest% %test_layout% %nodiff% zlib

::--------------------------
::szip for individual object
::-------------------------- 
set flag=-i %test_layout% -o %output_layout% f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10
call %tooltest% %test_layout% %nodiff% szip

::--------------
:: szip for all
::--------------
set flag=-i %test_layout% -o %output_layout% -f SZIP=8,NN
call %tooltest% %test_layout% %nodiff% szip

::-------------------------------
:: shuffle with individual object
::-------------------------------
set flag=-i %test_layout% -o %output_layout% -f dset2:SHUF  -l dset2:CHUNK=20x10
call %tooltest% %test_layout% %nodiff%

::----------------
:: shuffle for all
::----------------
set flag=-i %test_layout% -o %output_layout% -f SHUF
call %tooltest% %test_layout% %nodiff%

::-----------------------------------
:: fletcher32  with individual object
::-----------------------------------
set flag=-i %test_layout% -o %output_layout% -f dset2:FLET  -l dset2:CHUNK=20x10
call %tooltest% %test_layout% %nodiff%

::--------------------
:: fletcher32 for all
::--------------------
set flag=-i %test_layout% -o %output_layout% -f FLET
call %tooltest% %test_layout% %nodiff%

::------------
::all filters
::------------
set flag=-i %test_layout% -o %output_layout% -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10

:: Check whether szlib or zlib is available, if either library is not available, skip the test.

if "%HDF5_EXT_SZIP%"=="" (
	call %tooltest% %test_layout% %nodiff% skip
  )else (
     if "%HDF5_EXT_ZLIB%"=="" (
        call %tooltest% %test_layout% %nodiff% skip
     ) else (
        call %tooltest% %test_layout% %nodiff%
     )
  )
:: ***********************************************************
::  If the filter exists,the following tests assume the input files have filters
:: ***********************************************************

::-----------
:: szip copy
::-----------
set flag=-i %test_szip% -o %output_szip% 

::-----------
:: The following checks whether szip library is available,
:: If not, skip the test.
::-----------
if "%HDF5_EXT_SZIP%"=="" (
	call %tooltest% %test_szip% %nodiff% skip
) else (
	call %tooltest% %test_szip% %nodiff% 
)

::------------
::szip remove
::------------
set flag=-i %test_szip% -o %output_szip% -f dset_szip:NONE

::-----------
:: The following checks whether szip library is available,
:: If not, skip the test.
::-----------
if "%HDF5_EXT_SZIP%"=="" (
	call %tooltest% %test_szip% %nodiff% skip
) else (
 	call %tooltest% %test_szip% %nodiff% 
)

::--------------
:: deflate copy
::--------------
set flag=-i %test_deflate% -o %output_deflate%

::-----------
:: The following checks whether zlib library is available,
:: If not, skip the test.
::-----------
if "%HDF5_EXT_ZLIB%"=="" (
	call %tooltest% %test_deflate% %nodiff% skip
) else (
	call %tooltest% %test_deflate% %nodiff% 
)

::---------------
:: deflate remove
::---------------
set flag=-i %test_deflate% -o %output_deflate% -f dset_deflate:NONE

::-----------
:: The following checks whether zlib library is available,
:: If not, skip the test.
::-----------
if "%HDF5_EXT_ZLIB%"=="" (
	call %tooltest% %test_deflate% %nodiff% skip
) else (
	call %tooltest% %test_deflate% %nodiff% 
)


::--------------  
:: shuffle copy
::--------------
set flag=-i %test_shuffle% -o %output_shuffle%
call %tooltest% %test_shuffle% %nodiff%

::----------------
:: shuffle remove
::----------------
set flag=-i %test_shuffle% -o %output_shuffle% -f dset_shuffle:NONE
call %tooltest% %test_shuffle% %nodiff%

::-----------------
:: fletcher32 copy
::-----------------
set flag=-i %test_fletcher% -o %output_fletcher%
call %tooltest% %test_fletcher% %nodiff%

::------------------
:: fletcher32 remove
::------------------
set flag=-i %test_fletcher% -o %output_fletcher% -f dset_fletcher32:NONE
call %tooltest% %test_fletcher% %nodiff%

::----------
:: nbit copy
::----------
set flag=-i %test_nbit% -o %output_nbit%
call %tooltest% %test_nbit% %nodiff%

::------------
:: nbit remove
::------------
set flag=-i %test_nbit% -o %output_nbit% -f dset_nbit:NONE
call %tooltest% %test_nbit% %nodiff%

::---------
:: nbit add
::---------
set flag=-i %test_nbit% -o %output_nbit% -f dset_int31:NBIT
call %tooltest% %test_nbit% %nodiff%

::----------------
:: scaleoffset add
::----------------
set flag=-i %test_soffset% -o %output_soffset% -f dset_none:SOFF=31,IN
call %tooltest% %test_soffset% %nodiff% 

::-----------------
:: scaleoffset copy
::-----------------
set flag=-i %test_soffset% -o %output_soffset%
call %tooltest% %test_soffset% %nodiff% 

::-------------------
:: scaleoffset remove
::-------------------
set flag=-i %test_soffset% -o %output_soffset% -f dset_scaleoffset:NONE
call %tooltest% %test_soffset% %nodiff% 

::--------------------
:: remove all  filters
::--------------------

::--------------------
::-- Currently this test is very difficult to be tested on windows since the internal filters
::-- such as fletcher32, scaleoffset, shuffle is hard to be checked in batch files.
::-- Now only szip and deflate filters are checked. KY 2006-11-20

:: Check whether szlib or zlib is available, if either library is not available, skip the test.
set flag=-i %test_filters% -o %output_filters% -f NONE
if "%HDF5_EXT_SZIP%"=="" (
	call %tooltest% %test_filters% %nodiff% skip
  )else (
     if "%HDF5_EXT_ZLIB%"=="" (
        call %tooltest% %test_filters% %nodiff% skip
     ) else (
        call %tooltest% %test_filters% %nodiff%
     )
  )

::------------------
::filter conversions
::------------------
set flag=-i %test_deflate% -o %output_deflate% -f dset_deflate:SZIP=8,NN
call %tooltest% %test_deflate% %nodiff% zlib szip

set flag=-i %test_szip% -o %output_szip% -f dset_szip:GZIP=1
call %tooltest% %test_szip% %nodiff% zlib szip

::------
::limit
::------
set flag=-i %test_layout% -o %output_layout% -f GZIP=1 -m 1024
call %tooltest% %test_layout% %nodiff% zlib

::-----
::file
::-----
set flag=-i %test_layout% -o %output_layout% -e ..\..\testfiles\info.h5repack
call %tooltest% %test_layout% %nodiff% zlib

echo. *********************************************
echo layout options (these files have no filters)
echo. *********************************************

set flag=-i %test_layout% -o %output_layout% -l dset2:CHUNK=20x10
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l CHUNK=20x10
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset2:CONTI
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l CONTI
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset2:COMPA
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l COMPA
call %tooltest% %test_layout% %nodiff%

echo. *****************************************
echo layout conversions (file has no filters)
echo. *****************************************

set flag=-i %test_layout% -o %output_layout% -l dset_compact:CONTI
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_compact:CHUNK=2x5
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_compact:COMPA
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_contiguous:COMPA
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_contiguous:CHUNK=3x6
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_contiguous:CONTI
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_chunk:COMPA
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_chunk:CHUNK=18x13
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_layout% -o %output_layout% -l dset_chunk:CONTI
call %tooltest% %test_layout% %nodiff%

set flag=-i %test_objs% -o %output_objs% -n
call %tooltest% %test_layout% %nodiff%

cd ..\..

echo.
::Tests how many tests failed and how many tests skiped
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!
echo. 
find "SKIPED" %tempResults% | more +2
)

:: remove direcotory temptest and all its contents
rmdir /s/q temptest

:: Clean environment variables

for %%v in (p1 p2 tempResults exefile tooltest nodiff notcomp totalerr totalskip) do set %%v=
for %%v in (0 1 2 3 4 5 _szip _deflate _shuffle _fletcher32 _nbit _scaleoffset _all) do (
set test%%v=
set output%%v=
)


