% Angewandte Numerik 1, SoSe 2022
% Uebungsblatt 01, Aufgabe 03: Wert einer Gleitpunktdarstellung
%
% Testprogramm fuer die Funktion [d, v, t] = flp(b, m, n, x)
%
% Letzte Aenderung: 22.04.2022



%% Initialisierung

clearvars;
close all;
clc;

fprintf('\n');
fprintf('Angewandte Numerik 1, Sommersemester 2022\n');
fprintf('Uebungsblatt 1, Aufgabe 3d: Gleitpunkt-Darstellung\n');
fprintf('\n');



%% Definition und Durchfuehrung der Testfaelle

testfall = 0;
while true                          % alle Testfaelle untersuchen
    testfall = testfall + 1;        % naechster Testfall
    
    
    %% alle Testfaelle definieren
    
    switch testfall
        case 1                      % Testfall 1
            b     = 2;                  % Basis
            m     = 8;              	% Laenge der Mantisse
            n     = 3;               	% Laenge des Exponenten
            x     = 27.375;            	% zu konvertierende Zahl
            dSoll = [1 1 0 1 1 0 1 1];  % Mantisse
            vSoll = [1 0 1];            % Exponent
            tSoll = 1;                  % Vorzeichen Exponent
        case 2                      % Testfall 2
            b     = 8;                  % Basis
            m     = 8;              	% Laenge der Mantisse
            n     = 3;               	% Laenge des Exponenten
            x     = 27.375;            	% zu konvertierende Zahl
            dSoll = [3 3 3 0 0 0 0 0];  % Mantisse
            vSoll = [0 0 2];            % Exponent
            tSoll = 1;                  % Vorzeichen Exponent
        case 3                      % Testfall 3
            b     = 2;                  % Basis
            m     = 10;              	% Laenge der Mantisse
            n     = 3;               	% Laenge des Exponenten
            x     = 9.140625;          	% zu konvertierende Zahl
            dSoll = [1 0 0 1 0 0 1 0 0 1];      % Mantisse
            vSoll = [1 0 0];            % Exponent
            tSoll = 1;                  % Vorzeichen Exponent
        case 4                      % Testfall 4
            b     = 8;                  % Basis
            m     = 5;              	% Laenge der Mantisse
            n     = 3;               	% Laenge des Exponenten
            x     = 9.140625;          	% zu konvertierende Zahl
            dSoll = [1 1 1 1 0];        % Mantisse
            vSoll = [0 0 2];            % Exponent
            tSoll = 1;                  % Vorzeichen Exponent
        case 5                      % Testfall 5
            b     = 2;                  % Basis
            m     = 3;              	% Laenge der Mantisse
            n     = 2;               	% Laenge des Exponenten
            x     = 0.375;          	% zu konvertierende Zahl
            dSoll = [1 1 0];            % Mantisse
            vSoll = [0 1];              % Exponent
            tSoll = -1;                 % Vorzeichen Exponent
        case 6                      % Testfall 6
            b     = 8;                  % Basis
            m     = 5;              	% Laenge der Mantisse
            n     = 2;               	% Laenge des Exponenten
            x     = 0.0157470703125;   	% zu konvertierende Zahl
            dSoll = [1 0 0 4 0];        % Mantisse
            vSoll = [0 1];              % Exponent
            tSoll = -1;                 % Vorzeichen Exponent
        case 7                      % Testfall 7
            b     = 2;                  % Basis
            m     = 3;              	% Laenge der Mantisse
            n     = 3;               	% Laenge des Exponenten
            x     = 0.0625;          	% zu konvertierende Zahl
            dSoll = [1 0 0];            % Mantisse
            vSoll = [0 1 1];            % Exponent
            tSoll = -1;                 % Vorzeichen Exponent
        otherwise
            break;                  % keine Testfaelle mehr vorhanden
    end
    
    
    %% Testfall durchfuehren und Ergebnis ausgeben

    [d, v, t] = flp(b, m, n, x);
    
    spezString = 'Testfall %d: %s.\n';
    if max(abs([d - dSoll, v - vSoll, t - tSoll])) == 0
        fprintf(spezString, testfall, 'Bestanden');  
    else
        fprintf(2, spezString, testfall, 'Fehlgeschlagen');
    end

end
