Commit dbdb5a51 authored by Colin Eles's avatar Colin Eles
Browse files

added setting to generate real-time exceptions when input is NaN or when input...

added setting to generate real-time exceptions when input is NaN or when input type constraint is violated

git-svn-id: https://groke.mcmaster.ca/svn/grad/colin/trunk/TableTool@6878 57e6efec-57d4-0310-aeb1-a6c144bb1a8b
parent 1d6170f7
Loading
Loading
Loading
Loading
+49 −1
Original line number Diff line number Diff line
@@ -37,7 +37,18 @@ else
    output = 'output';
end

exception_flag = object.data.settings.except;

if (exception_flag)
    code = sprintf('function [%s, exception] = %s(%s)\n%s\n',output,char(function_name{1}(1)),input,'%%#eml');    
else
    code = sprintf('function [%s] = %s(%s)\n%s\n',output,char(function_name{1}(1)),input,'%%#eml');
end





% simulink forces you to have an output for all execution paths
% since it can't compute completness and disjointness we need
% to have a default value, if the user builds the table
@@ -63,6 +74,43 @@ else
    output_string = EMLGenerator.type_convert(test,object.datatype,char(object.data.Grid0.Cells(1).result_text) );
    code = [code sprintf('output=%s;\n', output_string )];
    
end


if (exception_flag)
    
    % generate NaN exceptions
    nan_string = '';
    
    % genereate constraint exception
    cons_string = '';

    for i = 1:size(parsed_input,2)
       % for each input consider if a NaN
       
       nan_string = [nan_string 'isnan(' char(parsed_input{i}(1)) ')'];
       
       if i ~= size(parsed_input,2)
            nan_string = [nan_string '||'];
       end
       
       if size(parsed_input{i},2) == 2
           
           str = regexp(parsed_input{i}(2),'(?<=\|).*(?=})','match','once');
           
           cons_string = [cons_string sprintf('if ~(%s) \n exception = true;\nreturn;\nelse\nexception = false;\nend\n',char(str))];
           
           
       end
       
       
       
    end
    code = [code sprintf('if (%s) \n exception = true;\nreturn;\nelse\nexception = false;\nend\n',nan_string)];
        code = [code cons_string];
    
    
    
end

end
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ set.set = 1;
set.inputs = object.settings.pvs_includes;
set.count = object.settings.counter_trials;
set.range = object.settings.counter_range;
set.except = object.settings.except;
object.Data.settings = set;
end
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ classdef Settings < handle
        pvs_includes = [];
        counter_trials = [];
        counter_range = [];
        except = [];
        
        % gui elements
        fig_width = 400;
@@ -26,6 +27,7 @@ classdef Settings < handle
        include_text = [];
        count_text = [];
        range_text = [];
        except_check = [];
    end
    
    methods
+1 −1
Original line number Diff line number Diff line
@@ -11,6 +11,6 @@ function [] = init(object)
object.pvs_includes = [];
object.counter_trials = 1000;
object.counter_range = 100;

object.exception = 0;
end
+6 −0
Original line number Diff line number Diff line
@@ -25,6 +25,12 @@ else
end
object.pvs_includes = get(object.include_text,'String');

if (get(object.except_check,'value') == get(object.except_check,'Max'))
    object.except = true;
else
    object.except = false;
end

if err
    msgbox(msg);
end
Loading