From 28c17c0eb2c49b58007d355c2046c4dda3cb2220 Mon Sep 17 00:00:00 2001
From: Rene Milk <rene.milk@wwu.de>
Date: Thu, 27 Oct 2016 15:52:04 +0200
Subject: [PATCH] move test distribution script to dune-xt

and pickle files to test dir
---
 cmake/scripts/compiles_totals.pickle | Bin 5523 -> 0 bytes
 cmake/scripts/distribute_testing.py  | 128 ---------------------------
 cmake/scripts/testruns_totals.pickle | Bin 10155 -> 0 bytes
 dune/gdt/test/CMakeLists.txt         |  10 +--
 dune/gdt/test/compiles_totals.pickle | Bin 0 -> 5523 bytes
 dune/gdt/test/testruns_totals.pickle | Bin 0 -> 10155 bytes
 6 files changed, 1 insertion(+), 137 deletions(-)
 delete mode 100644 cmake/scripts/compiles_totals.pickle
 delete mode 100644 cmake/scripts/distribute_testing.py
 delete mode 100644 cmake/scripts/testruns_totals.pickle
 create mode 100644 dune/gdt/test/compiles_totals.pickle
 create mode 100644 dune/gdt/test/testruns_totals.pickle

diff --git a/cmake/scripts/compiles_totals.pickle b/cmake/scripts/compiles_totals.pickle
deleted file mode 100644
index 754e4db1b7d1c7b99480d3829664b2c115ff0f40..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5523
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

diff --git a/cmake/scripts/distribute_testing.py b/cmake/scripts/distribute_testing.py
deleted file mode 100644
index 9e93d4d80..000000000
--- a/cmake/scripts/distribute_testing.py
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import pickle
-import sys
-from pprint import pprint
-import subprocess
-import time
-from contextlib import contextmanager
-import binpacking
-from multiprocessing import Pool, cpu_count
-
-
-MAXTIME = 8*60
-pickle_file = 'totals.pickle'
-
-
-@contextmanager
-def elapsed_timer():
-    clock = time.time
-    start = clock()
-    elapser = lambda: clock() - start
-    yield lambda: elapser()
-    end = clock()
-    elapser = lambda: end-start
-
-
-def _compile(binary):
-    with elapsed_timer() as timer:
-        try:
-            _ = subprocess.check_output(['ninja', '-j1', binary], universal_newlines=True, stderr=subprocess.STDOUT)
-        except subprocess.CalledProcessError as cpe:
-            if 'Timeout' not in cpe.output:
-                raise cpe
-            print('Timeout in compile {}'.format(binary))
-        return timer()
-
-
-def _run_tests(tpl):
-    binary, teststrings = tpl
-    testtimes = 0
-    for test in teststrings.split(';'):
-        with elapsed_timer() as timer:
-            try:
-                _ = subprocess.check_output(['ctest', '-j1', '-N', '-R', test], universal_newlines=True,
-                                            stderr=subprocess.STDOUT)
-            except subprocess.CalledProcessError as cpe:
-                if 'Timeout' not in cpe.output:
-                    raise cpe
-                # be pessimistic and double the timeout value as time for this run
-                testtimes += timer()
-                print('Timeout in {} from {}'.format(test, binary))
-            testtimes += timer()
-    return testtimes
-
-
-def _redo(processes, keys, *args):
-    try:
-        with Pool(processes=processes) as pool:
-            result = pool.map(*args)
-        return {k: v for k,v in zip(keys, result)}
-    except subprocess.CalledProcessError as cpe:
-        print('*'*79)
-        print(cpe.stdout)
-        print(cpe.stderr)
-        print('*' * 79)
-        raise cpe
-
-def do_timings(builddir, pickledir, binaries, testnames, processes):
-    os.chdir(builddir)
-    testlimit = -1
-
-    binaries = binaries[:testlimit]
-    compiles_fn = os.path.join(pickledir, 'compiles_' + pickle_file)
-    try:
-        compiles = pickle.load(open(compiles_fn, 'rb'))
-        if set(compiles.keys()) != set(binaries):
-            print('redoing compiles due to mismatched binaries')
-            compiles = _redo(processes, binaries, _compile, binaries)
-    except FileNotFoundError:
-        print('redoing compiles due to missing pickle')
-        compiles = _redo(processes, binaries, _compile, binaries)
-    pickle.dump(compiles, open(compiles_fn, 'wb'))
-
-    testnames = testnames[:testlimit]
-    testruns_fn = os.path.join(pickledir, 'testruns_' + pickle_file)
-    try:
-        loaded_testnames, testruns = pickle.load(open(testruns_fn, 'rb'))
-        if set(compiles.keys()) != set(binaries) or loaded_testnames != testnames:
-            print('redoing tests due to mismatched binaries/testnames')
-            testruns = _redo(processes, binaries, _run_tests, zip(binaries, testnames))
-    except FileNotFoundError:
-        print('redoing tests due to missing pickle')
-        testruns = _redo(processes, binaries, _run_tests, zip(binaries, testnames))
-    pickle.dump((testnames, testruns), open(testruns_fn, 'wb'))
-
-    totals = {n: compiles[n]+testruns[n] for n in binaries}
-    pickle.dump(totals, open(os.path.join(pickledir, pickle_file), 'wb'))
-    # print('totals')
-    # pprint(totals)
-    return totals
-
-
-# list comes with a leading empty entry
-all_testnames = sys.argv[4].split('/')[1:]
-builddir = sys.argv[1]
-module_root = sys.argv[2]
-pickledir = os.path.join(module_root, 'cmake', 'scripts')
-testdir = os.path.join(module_root, 'dune', 'gdt', 'test')
-cmake_outfile = os.path.join(testdir, 'builder_definitions.cmake')
-binaries = sys.argv[3].split(';')
-testname_map = {b: t.split(';') for b,t in zip(binaries, all_testnames)}
-processes = cpu_count()
-
-totals = do_timings(builddir, pickledir, binaries, all_testnames, processes)
-
-b = list(totals.keys())
-bins = binpacking.to_constant_volume(totals, MAXTIME)
-# for idx, bin in enumerate(bins):
-#     pprint('Bin {} vol: {}'.format(idx, sum(bin.values())))
-#     pprint(bin)
-
-with open(cmake_outfile, 'wt') as out:
-    for idx, bin in enumerate(bins):
-        out.write('add_custom_target(test_binaries_builder_{} DEPENDS {})\n'.format(idx, ' '.join(bin.keys())))
-        for binary in bin.keys():
-            for testname in testname_map[binary]:
-                out.write('set_tests_properties({} PROPERTIES LABELS "builder_{}")\n'.format(testname, idx))
diff --git a/cmake/scripts/testruns_totals.pickle b/cmake/scripts/testruns_totals.pickle
deleted file mode 100644
index 1ff8479a4b3754b9d7e164ebca260aaf106c9014..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10155
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

diff --git a/dune/gdt/test/CMakeLists.txt b/dune/gdt/test/CMakeLists.txt
index ed0612873..bf0cb2ca6 100644
--- a/dune/gdt/test/CMakeLists.txt
+++ b/dune/gdt/test/CMakeLists.txt
@@ -12,15 +12,7 @@ BEGIN_TESTCASES()
 
 END_TESTCASES()
 
-set(DXT_TRAVIS_BUILDER 18)
-
-set(current_idx 0)
-
-foreach (target ${dxt_test_binaries})
-    set(all_sorted_testnames "${all_sorted_testnames}/${dxt_test_names_${target}}")
-endforeach (target ${dxt_test_binaries})
-add_custom_target(refresh_test_timings python3 ${CMAKE_SOURCE_DIR}/cmake/scripts/distribute_testing.py
-    "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}" "${dxt_test_binaries}" "${all_sorted_testnames}" VERBATIM)
+# generated from dune-xt-common's distribute_testing.py
 include("builder_definitions.cmake")
 
 # link spe10 data file if present
diff --git a/dune/gdt/test/compiles_totals.pickle b/dune/gdt/test/compiles_totals.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..4fc411f1b6ef7c87799ee9d2249400204e8d47ce
GIT binary patch
literal 5523
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
Bq}Kod

literal 0
HcmV?d00001

diff --git a/dune/gdt/test/testruns_totals.pickle b/dune/gdt/test/testruns_totals.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..48d8c99caae911bd3b4ea3f17732ec46e54ed96a
GIT binary patch
literal 10155
zcmb_hYm^*S5gtJ$@-jpsm=IWAVSx~m5K-2UUPSB!U%}^9jJ>@xy^~3Lccy1%lPpLW
z2?oL|32zW^Fk*r)qF?}@i%<OF5&a|Qc*ObVAAjWd!*lqhb?e^hTiw&Qw<qDxp0m4E
zb?fofS9Nc9j^7xShQ)BHRB8vUw%2IZ!}?U!Z`bNmEzb*Ad11Zmhn_dF)vE*({&d)m
z-X_i>@p>a@`t5pCiF)*FbeuSkM8M+apiK7sYSW*p2A)^0dK1B9biBB5Zox(+2>tQs
z?cxe1n{boNqO-M|{P9p7p*7zjE@hg`9UUHNG$8@%tam0-V%N}NoFFb>2V}ZN5zjLb
zQ@S8~+k#qkQ#+{0jGHvRODrR^Og8izp<jjod9;w`%5=FMohX)&N~)G7xRXo)lhuK<
zE2=Ih8!uC4z`<%*AD5WW!JlG15{&75o+?&Y+=?N_qaiomZCA6ET%u}z!u$T}VVK&p
z)5LP-S%z$uUkk+5q!iYs0>2rAVXe`wl|8Sut=53JE45a+8MFae68fGu<F^{sX00Mo
z@6}rEFnW(zN;c9}U<uY<o-R%#;b5}So{1J(YRLNZy#_t$0}?SYl{3V-bWDHQWxcgK
zXNs#x&JsV6No`V7gC9=Ep##o?spx%T?Hu~K`BO#~iSx-wIzE;_iHF7FY$nOulf{0P
zxWpnv5G9(>xL+dHk;0}KAj0u_C;=c%+KOL=CY`Ep_56wtXxSQg&1qo6Ez|9`ADt~0
zk-1dv^?BzMc2GC*ke!ucUe}`Miq)3GDfk52@NsaS7$Ma`(-2IDK{Gmk;AZLv)CJ-k
zaw3fd$t4=L7v{p-5ad#EW~Mcrtc%1o^luCLtpHGtcnZM72Ed%&frX)Snzij_5L|2@
zeN@RrOPf$G5o-qYl_wX8>QXT}poy65bhv0{nMpp6mWCPqExJscLC3WkFy~-8Lf)x_
z%k8X*8Axm@my3(Z6qyHWhO5(QULjVId>Tc{cp}M+J62kIS3_o%xQr}kdcqCE(KyPl
zF#OGQ5}QIgfYmu|VA%WpVkJ3KAWVa$D-%l*r_tn6pu6n@iOHH0=K*sz`Jk1m;SAb1
zt`h4hfI%sz8I)nOZ8u?8l5<%x(8!$of=R-M#9}%-kvx;$HDV!2u)0<JW_c#MTAWV*
zBXENvuEJ|gc9~kd?4?WX7>*)K0LXYr9~BqTLEvUq@;%Q4bxprpvghRN{IGSqGZ9~F
zSw>jNK4RQWr%j%6oh7Tr#g8UHn+izJ`vj=KJ!#oBw9}smHXGKN4(*pq8`cP4pYW-`
z?x^*y&jq=rjE@b-`JkrFf4rYTA&>OmPZYci8GD~hG%^b_ZwLQW0RWmKHkb<|1HWNv
z`eSs15lrAHUQ_7m@ag^}$WGHK`b^%wV?mQv{cK^NnD9Plfwz(Pycx1ZDJ}H3Pc&;m
zrCBR)YH23>LLxn>F5x^Y3P)jD@QY%IaSFo$Ff$v5U$R%80K={lHx`7WVVf`8x{j<{
zx^<(t+~&Te;*vkUVrV%NaC9kvQc7{p1W%aNk0abGu!JLiEN5Puy!-aG#NxPy>bSW+
zGiMSTM3z_O;FhQ|oYx_!WxWvuu5<4KNOh@Hu(qZRCR}It%N<lbst1Fr>pa*!g8G&n
zXAY2Ta-I8jj-i3vJ3!5K9%xCiQlS!VhLr3ZLh<-XCl^kvpSHNplR*P@El(A;m?R)W
z$mnbrwMXG6zVaOl!%Vu)zR3>SD|%nntuY0)xuJ)e@dIKa2Q22g>pcGFA(WLr>21==
zISt6~^HRL@7TwJv*SY`t`Dl<QJ;kWJdpHF)AxZ!1ptkkRa*m5z%XJ>w{2H2w5yP4|
z-V3=4L@RCAdF<vxs2jiMWa-l1qG|B=^)4!;-kG+#&Vgm>KiNfNJKi?voj0VBlHp7`
zLXsd|_0p^CcGtQ4-yPH&g`ZgLqr6z-O>@R|_FmaVd)96HCOC6V2W70!aEj%4U2k@s
zM|W&MEz1KpRh8C|uL6)q6pjYFi{1hy@ka5e!LN=xAOrFe0+rzCO|(x2hwDbY6||2V
zMeU+5Y#rBmqNc(e^ktO4H>h`!uK~B7B#$rU&7l0zcbn_%+}}YPM>F+zy3Rd+>Y+NH
zBdPYcxFBiwcGubSg48b+xIcXz*lUjxKFSA(UBDJm7mwrq&Q)-;W8497bB54B-}4LG
zo9_fqdrB-uC9qB^FPxLu6>B%(s`MJ3kws~Vy(G;McL5)7>7s6YvE|$XD=0senDB0x
zemXCGVFB9dI&hC9%p+*s`XMLX+4sU&K21SBX2z69^lNmV>+C<+LHlp*%f%i@%dRmr
zJZRs=k8}W6^+jSY^xYC=tmtUhm+XBoC01@gH|+1QW`n;U!1l}v6fgey?*V}LDLqs=
zwvP`Fg0o9sMMKgD+AR_o&fBOSf<0zO2lba&^i5wq>^e`qsZdhj8^j|J<8EoWWVtY!
z96k!obfkfzaYLj#k)mMNt;b;QJ*Q46+Q255#{nQOD&_3uSi|8PP~XE!F8i^}n0x|w
za$`rz=Iqhte()sl&p&5T+{%;|R@Qf-r(CD=w+>nuY&A1Zd=vJZwsK+-7|H^Wo}^t!
z*yb)CW~;v3pS1MTP|}eeO2=zkx}-{4$MP*m-j*>`;C+-pa^L6L{jT%usS1&Ueii>V
zApgIezVkAs3}gLgpxx%lMk^J5axf_W4j}2|9xCUh#3&qqjMopLLYxw!Vc0<vGlu>i
z9RwHurIhSXx6eXvp3p$c!|;=;-XA=@2<T?`E>QG!M^JAa=@q?z<$W*w9&DDQqiA<6
z*&TFimej9yuJ41j$uYFnHz=W7X;A(Epua#$u@xU6YEOcO_78z}{?kRhzLgwA@ag0^
zK=bXhC}Um8b#F65JLEb~zxg_9<+YeD#*Y9`K^LWMt*a$}>^cuG+>4SikTN6X@958i
z`M;}L#{`-6I{yM-;zos~_#Q!MOnjlDKSn<R%a6=QcLrJTAh((;4nuZd>7W7Yio@rH
zTw-5@e*a4sb>fQvd8A*p(tFxVuu1tU1I5_IwC>A*k@Y=1%{tNe5~c(DDXe&l$572m
z=oA=V5gCSl2L1m>*_=sKr+8FdnD}+@=dN>b-b<)A0zZ)w25oKi1?m@&>2en>tsqM*
z(+S$*K>#B0A@P^4bK5qh9|J0hR!V^kTh{hhFiHQ~!xQtE)lBMHX#E32s9;-r4BB3S
zi}GO^iEWWFqQ3@Y`yCYJuBVdE)BYRRx$7T2)Hvpk+rNd==XcRoyu~LIXXf+oT<4DJ
m5X#OCP?Nad!{Au0T7nObRDk`=_6MlY8?*Ab>0QyQ%l{81GHB@l

literal 0
HcmV?d00001

-- 
GitLab