File: run_mod_file.m

package info (click to toggle)
dynare 7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 79,248 kB
  • sloc: cpp: 82,011; ansic: 28,583; objc: 12,573; yacc: 5,105; pascal: 2,374; lex: 1,502; python: 1,118; sh: 1,116; makefile: 605; lisp: 162; xml: 18
file content (86 lines) | stat: -rw-r--r-- 2,953 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
% Copyright © 2011-2026 Dynare Team
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare.  If not, see <https://www.gnu.org/licenses/>.

source_root = getenv('source_root');
addpath([source_root filesep 'tests' filesep 'utils']);
addpath([source_root filesep 'matlab']);
profile_suite_env = getenv('DYNARE_PROFILE_SUITE');
profile_suite = strcmpi(profile_suite_env, 'true') || strcmpi(profile_suite_env, '1') || strcmpi(profile_suite_env, 'yes');

if isoctave
    load_octave_packages
end

fprintf('\n*** TESTING: %s ***\n\n', getenv('mod_file'));

tic;

% NB: all variables will be cleared by the call to Dynare
try
    if ~isoctave && profile_suite
        profile clear;
        profile on;
    end
    % Read arguments from individual environment variables
    dynare_arg_count = str2double(getenv('dynare_arg_count'));
    if isnan(dynare_arg_count) || dynare_arg_count == 0
        dynare(getenv('mod_file'), 'console')
    else
        args_cell = cell(1, dynare_arg_count);
        for i = 1:dynare_arg_count
            args_cell{i} = getenv(sprintf('dynare_arg_%d', i-1));
        end
        dynare(getenv('mod_file'), 'console', args_cell{:})
    end
    testFailed = false;
catch exception
    printTestError(getenv('mod_file'), exception);
    testFailed = true;
end

if ~isoctave && profile_suite
    profile off;
    pinfo = profile('info');
    fprintf('\n*** Profiling summary (top 20 by total time) ***\n');
    if ~isempty(pinfo.FunctionTable)
        [~, idx] = sort([pinfo.FunctionTable.TotalTime], 'descend');
        topN = min(20, numel(idx));
        for k = 1:topN
            ft = pinfo.FunctionTable(idx(k));
            child_time = 0;
            if isfield(ft, 'Children') && ~isempty(ft.Children)
                child_time = sum([ft.Children.TotalTime]);
            end
            self_time = ft.TotalTime - child_time;
            if isfield(ft, 'NumCalls')
                calls = ft.NumCalls;
            elseif isfield(ft, 'TotalCalls')
                calls = ft.TotalCalls;
            else
                calls = NaN;
            end
            fprintf('%2d) %-60s total %8.3f s | self %8.3f s (%d calls)\n', k, ft.FunctionName, ft.TotalTime, self_time, calls);
        end
    else
        fprintf('(no profile data)\n');
    end
end

fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', toc);

% Ensure proper termination and exit code
quit(testFailed)