Xcos tests: mvc_memleaks.tst should be cross-platform 51/20551/3
Clément DAVID [Thu, 11 Oct 2018 08:56:55 +0000 (10:56 +0200)]
Change-Id: I27bb3e2b829716026f8546c4f48ac9ae758fd2f0

scilab/modules/xcos/tests/unit_tests/mvc_memleaks.dia.ref [deleted file]
scilab/modules/xcos/tests/unit_tests/mvc_memleaks.tst

diff --git a/scilab/modules/xcos/tests/unit_tests/mvc_memleaks.dia.ref b/scilab/modules/xcos/tests/unit_tests/mvc_memleaks.dia.ref
deleted file mode 100644 (file)
index 3242460..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-// ============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2016 - Scilab Enterprises - Clement DAVID
-//
-//  This file is distributed under the same license as the Scilab package.
-// ============================================================================
-// <-- TEST WITH GRAPHIC -->
-// <-- LINUX ONLY -->
-//
-// <-- Short Description -->
-// Check that a diagram import and a simulation does not leak MVC objects.
-// helper function to generate a MVC log of a script
-function logfile = generatelog(script)
-    mputl( ["loadXcosLibs();"
-    "jimport java.lang.System;"
-    ""
-    "scicos_log(""DEBUG"");"
-    ""
-    script
-    ""
-    "System.gc();"
-    "clear scs_m;"], "memleaks.sce");
-    cmd = SCI+"/bin/scilab -nw <memleaks.sce &>memleaks.sce.log"
-    host(cmd);
-    logfile = "memleaks.sce.log";
-    deletefile("memleaks.sce");
-endfunction
-// helper function to parse the MVC log and extract leaks
-function leaks = parselog(logfile)
-    leaks = [];
-    fd = mopen(logfile, "r");
-    if fd < 0 then bugmes();quit;end
-    line = mgetl(fd, 1);
-    while line <> [] do
-        t = tokens(line);
-        if and(size(t) == [9 1]) & and(t(1:2) == ["Xcos";"debug:"]) then
-            if t(3) == "objectUnreferenced(" then
-                increment = -1;
-            elseif t(3) == "objectReferenced(" then
-                increment = +1;
-            else
-                increment = 0;
-            end
-            uid = msscanf(t(4), "%d");
-            if size(leaks, "*") < uid then
-                leaks(uid) = 0;
-            end
-            leaks(uid) = leaks(uid) + increment;
-        end
-        line = mgetl(fd, 1);
-    end
-    mclose(fd);
-endfunction
-logfile = generatelog("importXcosDiagram(SCI+""/modules/xcos/demos/Discrete-KalmanFilter.zcos"");");
-leaks = parselog(logfile);
-find(leaks)
- ans  =
-    []
-logfile = generatelog( ["importXcosDiagram(SCI+""/modules/xcos/demos/Discrete-KalmanFilter.zcos"");"
-"xcos_simulate(scs_m);"]);
-leaks = parselog(logfile);
-find(leaks)
- ans  =
-    []
index f6f26c9..af881dc 100644 (file)
@@ -5,68 +5,49 @@
 //  This file is distributed under the same license as the Scilab package.
 // ============================================================================
 
-// <-- TEST WITH GRAPHIC -->
-// <-- LINUX ONLY -->
+// <-- TEST WITH XCOS -->
+// <-- NO CHECK REF -->
+
 //
 // <-- Short Description -->
 // Check that a diagram import and a simulation does not leak MVC objects.
 
-// helper function to generate a MVC log of a script
-function logfile = generatelog(script)
-    mputl( ["loadXcosLibs();"
-    "jimport java.lang.System;"
-    ""
-    "scicos_log(""DEBUG"");"
-    ""
-    script
-    ""
-    "System.gc();"
-    "clear scs_m;"], "memleaks.sce");
 
-    cmd = SCI+"/bin/scilab -nw <memleaks.sce &>memleaks.sce.log"
-    host(cmd);
+function check_memleaks(diary_id)
+    diary(diary_id, "close");
 
-    logfile = "memleaks.sce.log";
+    log = mgetl(TMPDIR + "/mvc_leak.log");
+    log = log(grep(log, ["objectCreated", "objectDeleted"]));
 
-    deletefile("memleaks.sce");
-endfunction
 
-// helper function to parse the MVC log and extract leaks
-function leaks = parselog(logfile)
-    leaks = [];
+    objects = strtod(csvTextScan(log, " ", ".", "string")(:, 7));
+    objects = gsort(objects);
 
-    fd = mopen(logfile, "r");
-    if fd < 0 then pause, end
+    leaks = objects(2*find((objects(1:2:$-1) - objects(2:2:$))));
+    if leaks <> [] then
+        scicos_log("WARNING");
+        error("check_memleaks found leaks at " + string(leaks));
+    end
+endfunction
 
-    line = mgetl(fd, 1);
-    while line <> [] do
-        t = tokens(line);
-        if and(size(t) == [9 1]) & and(t(1:2) == ["Xcos";"debug:"]) then
-            if t(3) == "objectUnreferenced(" then
-                increment = -1;
-            elseif t(3) == "objectReferenced(" then
-                increment = +1;
-            else
-                increment = 0;
-            end
-            uid = msscanf(t(4), "%d");
+loadXcosLibs();
+jimport java.lang.System;
+scicos_log("INFO");
 
-            if size(leaks, "*") < uid then
-                leaks(uid) = 0;
-            end
-            leaks(uid) = leaks(uid) + increment;
-        end
 
-        line = mgetl(fd, 1);
-    end
-    mclose(fd);
-endfunction
+diary_id = diary(TMPDIR + "/mvc_leak.log");
+importXcosDiagram(SCI+"/modules/xcos/demos/Discrete-KalmanFilter.zcos");
+clear scs_m;
+System.gc();
+sleep(2, "s");
+check_memleaks(diary_id);
 
-logfile = generatelog("importXcosDiagram(SCI+""/modules/xcos/demos/Discrete-KalmanFilter.zcos"");");
-leaks = parselog(logfile);
-find(leaks)
+diary_id = diary(TMPDIR + "/mvc_leak.log");
+importXcosDiagram(SCI+"/modules/xcos/demos/Discrete-KalmanFilter.zcos");
+xcos_simulate(scs_m, 4);
+clear scs_m;
+System.gc();
+sleep(2, "s");
+check_memleaks(diary_id);
 
-logfile = generatelog( ["importXcosDiagram(SCI+""/modules/xcos/demos/Discrete-KalmanFilter.zcos"");"
-"xcos_simulate(scs_m);"]);
-leaks = parselog(logfile);
-find(leaks)
+deletefile(TMPDIR + "/mvc_leak.log");