integrated realtimegc stuff into testament
This commit is contained in:
parent
c1d0b2403b
commit
c55f884b5c
7 changed files with 78 additions and 38 deletions
|
|
@ -21,24 +21,24 @@ int main(int argc, char* argv[])
|
||||||
void* hndl;
|
void* hndl;
|
||||||
pFunc status;
|
pFunc status;
|
||||||
pFunc count;
|
pFunc count;
|
||||||
pFunc occupiedMem;
|
pFunc checkOccupiedMem;
|
||||||
|
|
||||||
#ifdef WIN
|
#ifdef WIN
|
||||||
hndl = (void*) LoadLibrary((char const*)"./shared.dll");
|
hndl = (void*) LoadLibrary((char const*)"./tests/realtimeGC/shared.dll");
|
||||||
status = (pFunc)GetProcAddress((HMODULE) hndl, (char const*)"status");
|
status = (pFunc)GetProcAddress((HMODULE) hndl, (char const*)"status");
|
||||||
count = (pFunc)GetProcAddress((HMODULE) hndl, (char const*)"count");
|
count = (pFunc)GetProcAddress((HMODULE) hndl, (char const*)"count");
|
||||||
occupiedMem = (pFunc)GetProcAddress((HMODULE) hndl, (char const*)"occupiedMem");
|
checkOccupiedMem = (pFunc)GetProcAddress((HMODULE) hndl, (char const*)"checkOccupiedMem");
|
||||||
#else /* OSX || NIX */
|
#else /* OSX || NIX */
|
||||||
hndl = (void*) dlopen((char const*)"./libshared.so", RTLD_LAZY);
|
hndl = (void*) dlopen((char const*)"./tests/realtimeGC/libshared.so", RTLD_LAZY);
|
||||||
status = (pFunc) dlsym(hndl, (char const*)"status");
|
status = (pFunc) dlsym(hndl, (char const*)"status");
|
||||||
count = (pFunc) dlsym(hndl, (char const*)"count");
|
count = (pFunc) dlsym(hndl, (char const*)"count");
|
||||||
occupiedMem = (pFunc) dlsym(hndl, (char const*)"occupiedMem");
|
checkOccupiedMem = (pFunc) dlsym(hndl, (char const*)"checkOccupiedMem");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
assert(hndl);
|
assert(hndl);
|
||||||
assert(status);
|
assert(status);
|
||||||
assert(count);
|
assert(count);
|
||||||
assert(occupiedMem);
|
assert(checkOccupiedMem);
|
||||||
|
|
||||||
time_t startTime = time((time_t*)0);
|
time_t startTime = time((time_t*)0);
|
||||||
time_t runTime = (time_t)(RUNTIME);
|
time_t runTime = (time_t)(RUNTIME);
|
||||||
|
|
@ -52,9 +52,9 @@ int main(int argc, char* argv[])
|
||||||
status();
|
status();
|
||||||
/* printf("2. sleeping...\n"); */
|
/* printf("2. sleeping...\n"); */
|
||||||
sleep(1);
|
sleep(1);
|
||||||
occupiedMem();
|
checkOccupiedMem();
|
||||||
accumTime = time((time_t*)0) - startTime;
|
accumTime = time((time_t*)0) - startTime;
|
||||||
printf("--- Minutes left to run: %d\n", (int)(runTime-accumTime)/60);
|
/* printf("--- Minutes left to run: %d\n", (int)(runTime-accumTime)/60); */
|
||||||
}
|
}
|
||||||
printf("Cleaning up the shared object pointer...\n");
|
printf("Cleaning up the shared object pointer...\n");
|
||||||
#ifdef WIN
|
#ifdef WIN
|
||||||
|
|
@ -65,7 +65,3 @@ int main(int argc, char* argv[])
|
||||||
printf("Done\n");
|
printf("Done\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
set CXX=gcc
|
|
||||||
set LIBS=-ldl
|
|
||||||
set LNFLAGS=
|
|
||||||
set CFLAGS=-DWIN
|
|
||||||
set INC=
|
|
||||||
|
|
||||||
nim c shared.nim
|
|
||||||
nim c -o:nmain main.nim
|
|
||||||
%CXX% %INC% %DEFS% %CFLAGS% -o cmain main.c %LNFLAGS% %LIBS%
|
|
||||||
|
|
@ -3,38 +3,44 @@ discard """
|
||||||
output: "Done"
|
output: "Done"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import times
|
import times, os, threadpool
|
||||||
import os
|
|
||||||
|
|
||||||
const RUNTIME = 15 * 60 # 15 minutes
|
const RUNTIME = 15 * 60 # 15 minutes
|
||||||
|
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
const dllname = "./shared.dll"
|
const dllname = "./tests/realtimeGC/shared.dll"
|
||||||
elif defined(macosx):
|
elif defined(macosx):
|
||||||
const dllname = "./libshared.dylib"
|
const dllname = "./tests/realtimeGC/libshared.dylib"
|
||||||
else:
|
else:
|
||||||
const dllname = "./libshared.so"
|
const dllname = "./tests/realtimeGC/libshared.so"
|
||||||
|
|
||||||
proc status() {.importc: "status", dynlib: dllname.}
|
proc status() {.importc: "status", dynlib: dllname.}
|
||||||
proc count() {.importc: "count", dynlib: dllname.}
|
proc count() {.importc: "count", dynlib: dllname.}
|
||||||
proc occupiedMem() {.importc: "occupiedMem", dynlib: dllname.}
|
proc checkOccupiedMem() {.importc: "checkOccupiedMem", dynlib: dllname.}
|
||||||
|
|
||||||
proc main() =
|
proc process() =
|
||||||
let startTime = getTime()
|
let startTime = getTime()
|
||||||
let runTime = cast[Time](RUNTIME) #
|
let runTime = cast[Time](RUNTIME) #
|
||||||
var accumTime: Time
|
var accumTime: Time
|
||||||
while accumTime < runTime:
|
while accumTime < runTime:
|
||||||
for i in 0..10:
|
for i in 0..10:
|
||||||
count()
|
count()
|
||||||
#echo("1. sleeping... ")
|
# echo("1. sleeping... ")
|
||||||
sleep(500)
|
sleep(500)
|
||||||
for i in 0..10:
|
for i in 0..10:
|
||||||
status()
|
status()
|
||||||
#echo("2. sleeping... ")
|
# echo("2. sleeping... ")
|
||||||
sleep(500)
|
sleep(500)
|
||||||
occupiedMem()
|
checkOccupiedMem()
|
||||||
accumTime = cast[Time]((getTime() - startTime))
|
accumTime = cast[Time]((getTime() - startTime))
|
||||||
#echo("--- Minutes left to run: ", int(int(runTime-accumTime)/60))
|
# echo("--- Minutes left to run: ", int(int(runTime-accumTime)/60))
|
||||||
|
|
||||||
|
proc main() =
|
||||||
|
process()
|
||||||
|
# parallel:
|
||||||
|
# for i in 0..0:
|
||||||
|
# spawn process()
|
||||||
|
# sync()
|
||||||
echo("Done")
|
echo("Done")
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
@ -4,6 +4,8 @@ discard """
|
||||||
|
|
||||||
import strutils
|
import strutils
|
||||||
|
|
||||||
|
# Global state, accessing with threads, no locks. Don't do this at
|
||||||
|
# home.
|
||||||
var gCounter: uint64
|
var gCounter: uint64
|
||||||
var gTxStatus: bool
|
var gTxStatus: bool
|
||||||
var gRxStatus: bool
|
var gRxStatus: bool
|
||||||
|
|
@ -55,7 +57,7 @@ proc count() {.exportc: "count", dynlib.} =
|
||||||
gCounter += 1
|
gCounter += 1
|
||||||
# echo("gCounter: ", gCounter)
|
# echo("gCounter: ", gCounter)
|
||||||
|
|
||||||
proc occupiedMem() {.exportc: "occupiedMem", dynlib.} =
|
proc checkOccupiedMem() {.exportc: "checkOccupiedMem", dynlib.} =
|
||||||
echo("Occupied Memmory: ", getOccupiedMem())
|
if getOccupiedMem() > 10_000_000:
|
||||||
|
quit 1
|
||||||
discard
|
discard
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
--app:lib
|
--app:lib
|
||||||
--threads:on
|
--threads:on
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,18 @@ proc gcTests(r: var TResults, cat: Category, options: string) =
|
||||||
test "stackrefleak"
|
test "stackrefleak"
|
||||||
test "cyclecollector"
|
test "cyclecollector"
|
||||||
|
|
||||||
|
proc longGCTests(r: var TResults, cat: Category, options: string) =
|
||||||
|
when defined(windows):
|
||||||
|
let cOptions = "gcc -ldl -DWIN"
|
||||||
|
else:
|
||||||
|
let cOptions = "gcc -ldl"
|
||||||
|
|
||||||
|
var c = initResults()
|
||||||
|
# According to ioTests, this should compile the file
|
||||||
|
testNoSpec c, makeTest("tests/realtimeGC/shared", options, cat, actionCompile)
|
||||||
|
# testC r, makeTest("tests/realtimeGC/cmain", cOptions, cat, actionRun)
|
||||||
|
testSpec r, makeTest("tests/realtimeGC/nmain", options & "--threads: on", cat, actionRun)
|
||||||
|
|
||||||
# ------------------------- threading tests -----------------------------------
|
# ------------------------- threading tests -----------------------------------
|
||||||
|
|
||||||
proc threadTests(r: var TResults, cat: Category, options: string) =
|
proc threadTests(r: var TResults, cat: Category, options: string) =
|
||||||
|
|
@ -340,6 +352,8 @@ proc processCategory(r: var TResults, cat: Category, options: string) =
|
||||||
dllTests(r, cat, options)
|
dllTests(r, cat, options)
|
||||||
of "gc":
|
of "gc":
|
||||||
gcTests(r, cat, options)
|
gcTests(r, cat, options)
|
||||||
|
of "longgc":
|
||||||
|
longGCTests(r, cat, options)
|
||||||
of "debugger":
|
of "debugger":
|
||||||
debuggerTests(r, cat, options)
|
debuggerTests(r, cat, options)
|
||||||
of "manyloc":
|
of "manyloc":
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,25 @@ proc callCompiler(cmdTemplate, filename, options: string,
|
||||||
elif suc =~ pegSuccess:
|
elif suc =~ pegSuccess:
|
||||||
result.err = reSuccess
|
result.err = reSuccess
|
||||||
|
|
||||||
|
proc callCCompiler(cmdTemplate, filename, options: string,
|
||||||
|
target: TTarget): TSpec =
|
||||||
|
let c = parseCmdLine(cmdTemplate % ["target", targetToCmd[target],
|
||||||
|
"options", options, "file", filename.quoteShell])
|
||||||
|
var p = startProcess(command="gcc", args=c[4.. ^1],
|
||||||
|
options={poStdErrToStdOut, poUsePath})
|
||||||
|
let outp = p.outputStream
|
||||||
|
var x = newStringOfCap(120)
|
||||||
|
result.nimout = ""
|
||||||
|
result.msg = ""
|
||||||
|
result.file = ""
|
||||||
|
result.outp = ""
|
||||||
|
result.line = -1
|
||||||
|
while outp.readLine(x.TaintedString) or running(p):
|
||||||
|
result.nimout.add(x & "\n")
|
||||||
|
close(p)
|
||||||
|
if p.peekExitCode == 0:
|
||||||
|
result.err = reSuccess
|
||||||
|
|
||||||
proc initResults: TResults =
|
proc initResults: TResults =
|
||||||
result.total = 0
|
result.total = 0
|
||||||
result.passed = 0
|
result.passed = 0
|
||||||
|
|
@ -247,8 +266,22 @@ proc testNoSpec(r: var TResults, test: TTest) =
|
||||||
r.addResult(test, "", given.msg, given.err)
|
r.addResult(test, "", given.msg, given.err)
|
||||||
if given.err == reSuccess: inc(r.passed)
|
if given.err == reSuccess: inc(r.passed)
|
||||||
|
|
||||||
|
proc testC(r: var TResults, test: TTest) =
|
||||||
|
# runs C code. Doesn't support any specs, just goes by exit code.
|
||||||
|
let tname = test.name.addFileExt(".c")
|
||||||
|
inc(r.total)
|
||||||
|
styledEcho "Processing ", fgCyan, extractFilename(tname)
|
||||||
|
var given = callCCompiler(cmdTemplate, test.name & ".c", test.options, test.target)
|
||||||
|
if given.err != reSuccess:
|
||||||
|
r.addResult(test, "", given.msg, given.err)
|
||||||
|
elif test.action == actionRun:
|
||||||
|
let exeFile = changeFileExt(test.name, ExeExt)
|
||||||
|
var (buf, exitCode) = execCmdEx(exeFile, options = {poStdErrToStdOut, poUseShell})
|
||||||
|
if exitCode != 0: given.err = reExitCodesDiffer
|
||||||
|
if given.err == reSuccess: inc(r.passed)
|
||||||
|
|
||||||
proc makeTest(test, options: string, cat: Category, action = actionCompile,
|
proc makeTest(test, options: string, cat: Category, action = actionCompile,
|
||||||
target = targetC): TTest =
|
target = targetC, env: string = ""): TTest =
|
||||||
# start with 'actionCompile', will be overwritten in the spec:
|
# start with 'actionCompile', will be overwritten in the spec:
|
||||||
result = TTest(cat: cat, name: test, options: options,
|
result = TTest(cat: cat, name: test, options: options,
|
||||||
target: target, action: action)
|
target: target, action: action)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue