diff options
Diffstat (limited to 'tcllib/modules/grammar_me/me_cpu.test')
-rw-r--r-- | tcllib/modules/grammar_me/me_cpu.test | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/tcllib/modules/grammar_me/me_cpu.test b/tcllib/modules/grammar_me/me_cpu.test new file mode 100644 index 0000000..3555ab2 --- /dev/null +++ b/tcllib/modules/grammar_me/me_cpu.test @@ -0,0 +1,162 @@ +# me_cpucore.test: Tests for the ME virtual machine -*- tcl -*- +# +# This file contains a collection of tests for one or more of the +# commands making up the ME virtual machine. Sourcing this file into +# Tcl runs the tests and generates output for errors. No output means +# no errors were found. +# +# Copyright (c) 2005-2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +# All rights reserved. +# +# RCS: @(#) $Id: me_cpu.test,v 1.3 2006/10/09 21:41:40 andreas_kupries Exp $ + +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.4 +testsNeedTcltest 2.1 + +support { + use fileutil/fileutil.tcl fileutil + useLocal me_cpucore.tcl grammar::me::cpu::core +} +testing { + useLocalKeep me_cpu.tcl grammar::me::cpu +} + +# ------------------------------------------------------------------------- + +snitErrors + +proc cpustate {cpu} { + set vstate {} + lappend vstate cd [$cpu code ] + lappend vstate pc [$cpu pc ] + lappend vstate ht [$cpu halted] + lappend vstate eo [$cpu iseof ] + lappend vstate tc [$cpu tok ] + lappend vstate at [$cpu at ] + lappend vstate cc [$cpu cc ] + lappend vstate ok [$cpu ok ] + lappend vstate sv [$cpu sv ] + lappend vstate er [$cpu error ] + lappend vstate ls [$cpu lstk ] + lappend vstate as [$cpu astk ] + lappend vstate ms [$cpu mstk ] + lappend vstate es [$cpu estk ] + lappend vstate rs [$cpu rstk ] + lappend vstate nc [$cpu nc ] + return $vstate +} + +proc cpudelta {prev now} { + array set _ {} + foreach {k v} $prev { + set _($k) $v + } + set res {} + foreach {k v} $now { + if {[info exists _($k)] && ($_($k) eq $v)} continue + lappend res $k $v + } + return $res +} + +proc cpufstate {vstate} { + set res {} + foreach {k v} $vstate {lappend res [list $k $v]} + join $res \n +} + +proc cpusubst {vstate args} { + array set _ $vstate + foreach {k v} $args {set _($k) $v} + set res {} + foreach k {cd pc ht eo tc at cc ok sv er ls as ms es rs nc} { + if {![info exists _($k)]} continue + lappend res $k $_($k) + } + return $res +} + +proc cpufilter {vstate args} { + array set _ $vstate + set res {} + foreach k $args { lappend res $k $_($k) } + return $res +} + +proc canon_code {code} { + foreach {i p t} $code break + # Sorting the token map, canonical rep for direct comparison + return [list $i $p [dictsort $t]] +} + +# ------------------------------------------------------------------------- + +set asm_table [string trimright \ + [fileutil::cat \ + [localPath me_cpucore.tests.asm-map.txt]]] + +set badmach_table [string trimright \ + [fileutil::cat \ + [localPath me_cpucore.tests.badmach-map.txt]]] + +set semantics [string trimright \ + [fileutil::cat \ + [localPath me_cpucore.tests.semantics.txt]]] + +# ------------------------------------------------------------------------- +# In this section we run all the tests depending on a grammar::me::cpu::core, +# and thus have to test all the available implementations. + +set tests [file join [file dirname [info script]] me_cpu.testsuite] + +catch {memory validate on} + +set impl tcl +set usec [time {source $tests} 1] + +if 0 { + foreach impl [grammar::me::cpu::core::Implementations] { + grammar::me::cpu::core::SwitchTo $impl + + # The global variable 'impl' is part of the public API the + # testsuit (in htmlparse_tree.testsuite) can expect from the + # environment. + + namespace import -force grammar::me::cpu::core + + set usec [time {source $tests} 1] + + #puts "$impl:\t$usec" + } +} + +catch {memory validate off} + +unset usec +unset tests + +#puts "" + +# Reset system to fully inactive state. +# grammar::me::cpu::core::SwitchTo {} + +# ------------------------------------------------------------------------- + +# ### ### ### ######### ######### ######### +## Cleanup and statistics. + +rename cpustate {} +rename cpufstate {} +rename cpudelta {} +rename cpufilter {} +rename canon_code {} + +unset asm_table badmach_table semantics + +testsuiteCleanup |