@echo off
REM **************************************************************************
REM  Software zum Buch "Kryptographie in C und C++"
REM  Autor: Michael Welschenbach
REM
REM  Quelldatei testgcca.bat
REM  Batch-Datei zur FLINT/C-Testsuite fuer OS/2
REM  Aufruf: testgcca [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 -DFLINT_ASM -o flint.obj ../src/flint.c
gcc -c -O2 -Wall -ansi -I../src -DFLINT_ASM -o flintpp.obj ../src/flintpp.cpp

if not %1~ == ~  goto %1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

REM Teste LINT-Arithmetik
:con
gcc -O2 -Wall -ansi -I../src -L../lib -DFLINT_ASM -o testcnst.exe testcnst.cpp flint.obj -lflinta flintpp.obj -lstdcpp
testcnst
if not errorlevel 0 goto err

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

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

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

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

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


goto exit

:err
echo Fehler in Testmodul
quit 255

:exit
echo Alles O.K.

