@echo off
REM **************************************************************************
REM  Software zum Buch "Kryptographie in C und C++"
REM  Autor: Michael Welschenbach
REM
REM  Quelldatei testvc.bat
REM  Batch-Datei zur FLINT/C-Testsuite fuer MS Visual C/C++ unter 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 **************************************************************************


cl -c -O2 -W3 -nologo -I..\src ..\src\flint.c
cl -c -O2 -W3 -nologo -I..\src ..\src\flintpp.cpp

if not %1~ == ~  goto %1

REM Teste linearen Kongruenzengenerator
cl -O2 -W3 -nologo -I..\src testrand.c flint.obj
testrand
if not errorlevel 0 goto err

REM Teste BBS-Generator
cl -O2 -W3 -nologo -I..\src testbbs.c flint.obj
REM testbbs dauert sehr lange...
REM testbbs
if not errorlevel 0 goto err

REM Teste Registerverwaltung
:reg
cl -O2 -W3 -nologo -I..\src testreg.c flint.obj
testreg
if not errorlevel 0 goto err

REM Teste Basisfunktionen
:bas
cl -O2 -W3 -nologo -I..\src testbas.c flint.obj
testbas
if not errorlevel 0 goto err

REM Teste Addition
:add
cl -O2 -W3 -nologo -I..\src testadd.c flint.obj
testadd
if not errorlevel 0 goto err

REM Teste Subtraktion
:sub
cl -O2 -W3 -nologo -I..\src testsub.c flint.obj
testsub
if not errorlevel 0 goto err

REM Teste Multiplikation
:mul
cl -O2 -W3 -nologo -I..\src testmul.c flint.obj
cl -O2 -W3 -nologo -I..\src 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
cl -O2 -W3 -nologo -I..\src testsqr.c flint.obj
testsqr
if not errorlevel 0 goto err

REM Teste Division mit Rest
:div
cl -O2 -W3 -nologo -I..\src testdiv.c flint.obj
testdiv
if not errorlevel 0 goto err

REM Teste modulare Addition
:madd
cl -O2 -W3 -nologo -I..\src testmadd.c flint.obj
testmadd
if not errorlevel 0 goto err

REM Teste modulare Subtraktion
:msub
cl -O2 -W3 -nologo -I..\src testmsub.c flint.obj
testmsub
if not errorlevel 0 goto err

REM Teste modulare Multiplikation
:mmul
cl -O2 -W3 -nologo -I..\src testmmul.c flint.obj
testmmul
if not errorlevel 0 goto err

REM Teste modulare Quadrierung
:msqr
cl -O2 -W3 -nologo -I..\src testmsqr.c flint.obj
testmsqr
if not errorlevel 0 goto err

REM Teste Schiebeoperationen
:shift
cl -O2 -W3 -nologo -I..\src testshft.c flint.obj
testshft
if not errorlevel 0 goto err

REM Teste Funktionen fuer Bit-Zugriffe
:set
cl -O2 -W3 -nologo -I..\src testset.c flint.obj
testset
if not errorlevel 0 goto err

REM Teste Boole'sche Funktionen
:bool
cl -O2 -W3 -nologo -I..\src testbool.c flint.obj
testbool
if not errorlevel 0 goto err

REM Teste Erkennung und Berechnung von Quadratwurzeln
:iroot
cl -O2 -W3 -nologo -I..\src testiroo.c flint.obj
testiroo
if not errorlevel 0 goto err

REM Teste gcd, xgcd
:gcd
cl -O2 -W3 -nologo -I..\src testgcd.c flint.obj
testgcd
if not errorlevel 0 goto err

REM Teste modulare Potenzierung
:mexp
cl -O2 -W3 -nologo -I..\src testmexp.c flint.obj
testmexp
if not errorlevel 0 goto err

REM Teste RIPEMD160
:ripe
cl -O2 -W3 -nologo -I..\src testripe.c ..\src\ripemd.c
testripe
if not errorlevel 0 goto err

REM Teste LINT-Konstruktoren
:con
cl -O2 -W3 -nologo -I..\src testcnst.cpp flint.obj flintpp.obj 
testcnst
if not errorlevel 0 goto err

REM Teste LINT-Arithmetik
:ari
cl -O2 -W3 -nologo -I..\src testari.cpp flint.obj flintpp.obj 
testari
if not errorlevel 0 goto err

REM Teste Erkennung und Berechnung von Quadratwurzeln
:xgcd
cl -O2 -W3 -nologo -I..\src testxgcd.cpp flint.obj flintpp.obj 
testxgcd
if not errorlevel 0 goto err

REM Teste LINT-Funktionen isprime, gcd, jacobi und root
:root
cl -O2 -W3 -nologo -I..\src testroot.cpp flint.obj flintpp.obj 
testroot
if not errorlevel 0 goto err

REM Teste LINT-Funktion chinrest
:chin
cl -O2 -W3 -nologo -I..\src testchin.cpp flint.obj flintpp.obj 
testchin
if not errorlevel 0 goto err

REM Teste LINT-Funktion primroot
:prrt
cl -O2 -W3 -nologo -I..\src testprrt.cpp flint.obj flintpp.obj 
testprrt
if not errorlevel 0 goto err


goto exit

:err
echo Fehler in Testmodul
quit 255

:exit
echo Alles O.K.

