@echo off
REM **************************************************************************
REM  Software zum Buch "Kryptographie in C und C++"
REM  Autor: Michael Welschenbach
REM
REM  Quelldatei testvca.bat
REM  Batch-Datei zur FLINT/C-Testsuite fuer MS Visual C/C++ unter Windows
REM  mit Assembler-Unterstuetzung
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 -DFLINT_ASM -nologo -I..\src ..\src\flint.c
cl -c -O2 -W3 -DFLINT_ASM -nologo -I..\src ..\src\flintpp.cpp

if not %1~ == ~  goto %1

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

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

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

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

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

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

REM Teste Multiplikation
:mul
cl -O2 -W3 -DFLINT_ASM -nologo -I..\src testmul.c flint.obj ..\lib\flintavc.lib
cl -O2 -W3 -DFLINT_ASM -nologo -I..\src testkar.c ..\src\kmul.c flint.obj ..\lib\flintavc.lib
testmul
if not errorlevel 0 goto err
testkar
if not errorlevel 0 goto err

REM Teste Quadrierung
:sqr
cl -O2 -W3 -DFLINT_ASM -nologo -I..\src testsqr.c flint.obj ..\lib\flintavc.lib
testsqr
if not errorlevel 0 goto err

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


goto exit

:err
echo Fehler in Testmodul
quit 255

:exit
echo Alles O.K.

