@echo off
REM **************************************************************************
REM  Software zum Buch "Kryptographie in C und C++"
REM  Autor: Michael Welschenbach
REM
REM  Quelldatei testgcc.bat
REM  Batch-Datei zur FLINT/C-Testsuite fuer DOS und Windows
REM  Aufruf: testgcc [reg bas add sub mul sqr div madd msub mmul msqr shift
REM                   set bool iroot gcd mexp ripe con ari xgcd root chin prrt]
REM
REM  Copyright (C) 1998-2001 by Michael Welschenbach
REM  Copyright (C) 1998-2001 by Springer-Verlag Berlin, Heidelberg
REM
REM  All Rights Reserved
REM
REM  Die Software darf fuer nichtkommerzielle Zwecke frei verwendet und
REM  veraendert werden, solange die folgenden Bedingungen anerkannt werden:
REM
REM  (1) Alle Aenderungen muessen als solche kenntlich gemacht werden, so dass
REM      nicht der Eindruck erweckt wird, es handle sich um die Original-
REM      Software.
REM
REM  (2) Die Copyright-Hinweise und die uebrigen Angaben in diesem Feld
REM      duerfen weder entfernt noch veraendert werden.
REM
REM  (3) Weder der Verlag noch der Autor uebernehmen irgendeine Haftung fuer   
REM      eventuelle Schaeden, die aus der Verwendung oder aus der Nicht-       
REM      verwendbarkeit der Software, gleich fuer welchen Zweck, entstehen     
REM      sollten, selbst dann nicht, wenn diese Schaeden durch Fehler verur-   
REM      sacht wurden, die in der Software enthalten sein sollten.             
REM
REM **************************************************************************


gcc -c -O2 -Wall -ansi -I../src -o flint.obj ../src/flint.c
gcc -c -O2 -Wall -ansi -I../src -o flintpp.obj ../src/flintpp.cpp

if not %1~ == ~  goto %1

REM Teste linearen Kongruenzengenerator
gcc -O2 -Wall -ansi -I../src -o testrand.exe testrand.c flint.obj
testrand
if not errorlevel 0 goto err

REM Teste BBS-Generator
gcc -O2 -Wall -ansi -I../src -o testbbs.exe testbbs.c flint.obj
REM testbbs dauert sehr lange...
REM testbbs
if not errorlevel 0 goto err

REM Teste Registerverwaltung
:reg
gcc -O2 -Wall -ansi -I../src -o testreg.exe testreg.c flint.obj
testreg
if not errorlevel 0 goto err

REM Teste Basisfunktionen
:bas
gcc -O2 -Wall -ansi -I../src -o testbas.exe testbas.c flint.obj
testbas
if not errorlevel 0 goto err

REM Teste Addition
:add
gcc -O2 -Wall -ansi -I../src -o testadd.exe testadd.c flint.obj
testadd
if not errorlevel 0 goto err

REM Teste Subtraktion
:sub
gcc -O2 -Wall -ansi -I../src -o testsub.exe testsub.c flint.obj
testsub
if not errorlevel 0 goto err

REM Teste Multiplikation
:mul
gcc -O2 -Wall -ansi -I../src -o testmul.exe testmul.c flint.obj
gcc -O2 -Wall -ansi -I../src -o testkar.exe testkar.c ../src/kmul.c flint.obj
testmul
if not errorlevel 0 goto err
testkar
if not errorlevel 0 goto err

REM Teste Quadrierung
:sqr
gcc -O2 -Wall -ansi -I../src -o testsqr.exe testsqr.c flint.obj
testsqr
if not errorlevel 0 goto err

REM Teste Division mit Rest
:div
gcc -O2 -Wall -ansi -I../src -o testdiv.exe testdiv.c flint.obj
testdiv
if not errorlevel 0 goto err

REM Teste modulare Addition
:madd
gcc -O2 -Wall -ansi -I../src -o testmadd.exe testmadd.c flint.obj
testmadd
if not errorlevel 0 goto err

REM Teste modulare Subtraktion
:msub
gcc -O2 -Wall -ansi -I../src -o testmsub.exe testmsub.c flint.obj
testmsub
if not errorlevel 0 goto err

REM Teste modulare Multiplikation
:mmul
gcc -O2 -Wall -ansi -I../src -o testmmul.exe testmmul.c flint.obj
testmmul
if not errorlevel 0 goto err

REM Teste modulare Quadrierung
:msqr
gcc -O2 -Wall -ansi -I../src -o testmsqr.exe testmsqr.c flint.obj
testmsqr
if not errorlevel 0 goto err

REM Teste Schiebeoperationen
:shift
gcc -O2 -Wall -ansi -I../src -o testshft.exe testshft.c flint.obj
testshft
if not errorlevel 0 goto err

REM Teste Funktionen fuer Bit-Zugriffe
:set
gcc -O2 -Wall -ansi -I../src -o testset.exe testset.c flint.obj
testset
if not errorlevel 0 goto err

REM Teste Boole'sche Funktionen
:bool
gcc -O2 -Wall -ansi -I../src -o testbool.exe testbool.c flint.obj
testbool
if not errorlevel 0 goto err

REM Teste Erkennung und Berechnung von Quadratwurzeln
:iroot
gcc -O2 -Wall -ansi -I../src -o testiroo.exe testiroo.c flint.obj
testiroo
if not errorlevel 0 goto err

REM Teste gcd, xgcd
:gcd
gcc -O2 -Wall -ansi -I../src -o testgcd.exe testgcd.c flint.obj
testgcd
if not errorlevel 0 goto err

REM Teste modulare Potenzierung
:mexp
gcc -O2 -Wall -ansi -I../src -o testmexp.exe testmexp.c flint.obj
testmexp
if not errorlevel 0 goto err

REM Teste RIPEMD160
:ripe
gcc -O2 -Wall -ansi -I../src -o testripe.exe testripe.c ../src/ripemd.c
testripe
if not errorlevel 0 goto err

REM Teste LINT-Konstruktoren
:con
gcc -O2 -Wall -ansi -I../src -o testcnst.exe testcnst.cpp flint.obj flintpp.obj -lstdc++
testcnst
if not errorlevel 0 goto err

REM Teste LINT-Arithmetik
:ari
gcc -O2 -Wall -ansi -I../src -o testari.exe testari.cpp flint.obj flintpp.obj -lstdc++
testari
if not errorlevel 0 goto err

REM Teste Erkennung und Berechnung von Quadratwurzeln
:xgcd
gcc -O2 -Wall -ansi -I../src -o testxgcd.exe testxgcd.cpp flint.obj flintpp.obj -lstdc++
testxgcd
if not errorlevel 0 goto err

REM Teste LINT-Funktionen isprime, gcd, jacobi und root
:root
gcc -O2 -Wall -ansi -I../src -o testroot.exe testroot.cpp flint.obj flintpp.obj -lstdc++
testroot
if not errorlevel 0 goto err

REM Teste LINT-Funktion chinrest
:chin
gcc -O2 -Wall -ansi -I../src -o testchin.exe testchin.cpp flint.obj flintpp.obj -lstdc++
testchin
if not errorlevel 0 goto err

REM Teste LINT-Funktion primroot
:prrt
gcc -O2 -Wall -ansi -I../src -o testprrt.exe testprrt.cpp flint.obj flintpp.obj -lstdc++
testprrt
if not errorlevel 0 goto err


goto exit

:err
echo Fehler in Testmodul
quit 255

:exit
echo Alles O.K.

