Author: sebastien.lelong
Date: Sat Oct 18 01:29:20 2008
New Revision: 422
Added:
trunk/tools/testing_matrix.tmpl
trunk/unvalidated/sample/testing_matrix.yaml
Modified:
trunk/tools/jallib
Log:
"jallib test" handles the testing matrix, see help
Modified: trunk/tools/jallib
==============================================================================
--- trunk/tools/jallib (original)
+++ trunk/tools/jallib Sat Oct 18 01:29:20 2008
@@ -14,7 +14,14 @@
# Description: this script handles common tasks when using the jallib SVN
repository
# `jallib help` for more !
#
-#
+# Dependencies: according to the following actions, you'll need to install
the
+# following libraries (if you don't use the action, you can skip it)
+# - jalv2 executable (compile): http://www.casadeyork.com/jalv2
+# - wikify (jalapi): http://cspace.googlecode.com/svn/wiki/wikify.py
+# - Cheetah (jalapi): http://cheetahtemplate.org
+# - yaml (test): http://pyyaml.org/wiki/PyYAML
+# - pysvn (jalapi,test): http://pysvn.tigris.org/
+#
# Notes:
#
@@ -24,6 +31,21 @@
import re
+#########
+# TOOLS #
+#########
+
+def get_jal_filenames(dir):
+ jalfiles = []
+ for df in os.listdir(dir):
+ if df.startswith("."):
+ continue
+ fulldf = os.path.join(dir,df)
+ if os.path.isfile(fulldf) and fulldf.endswith(".jal"):
+ jalfiles.append(df)
+ else:
+ jalfiles.extend(get_jal_filenames(fulldf))
+ return jalfiles
################
@@ -71,7 +93,7 @@
# There's not even an argument for the compiler...
if not original_args:
- print "Missing arguments to jalv2 compiler..."
+ print >> sys.stderr, "Missing arguments to jalv2 compiler..."
sys.exit(255)
# Try to extract jallib args
@@ -88,7 +110,7 @@
args = list(set(original_args).difference(set(jallib_args)))
- jalv2_exec = "jalv2"
+ jalv2_exec = None
dirs = None
for o,v in opts:
if o == '-R':
@@ -99,13 +121,16 @@
elif o == '-E':
jalv2_exec = v
else:
- print "Wrong option %s" % o
+ print >> sys.stderr, "Wrong option %s" % o
# No root specified ? Try env var, else defaut to cwd
if not dirs:
v = os.environ.get('JALLIB_REPOS',os.path.curdir)
gdirs = v.split(":")
for d in gdirs:
dirs = _explore_dir(d)
+ # No exec specify, try env var or defaulting
+ if not jalv2_exec:
+ jalv2_exec = os.environ.get('JALLIB_JALV2','jalv2')
cmd = [jalv2_exec,"-s",";".join(dirs)]
# Complete with compiler args
if args:
@@ -114,7 +139,7 @@
try:
status = subprocess.check_call(cmd,shell=False)
except subprocess.CalledProcessError,e:
- print "Error while compiling file (status=%s). See previous
message." %
e.returncode
+ print >> sys.stderr, "Error while compiling file (status=%s).
See
previous message." % e.returncode
sys.exit(e.returncode)
pass
@@ -317,14 +342,14 @@
def report(filename):
- print "File: %s" % filename
- print "%d errors found" % len(errors)
+ print >> sys.stderr, "File: %s" % filename
+ print >> sys.stderr, "%d errors found" % len(errors)
for err in errors:
- print "\tERROR: %s" % err
- print
- print "%d warnings found" % len(warnings)
+ print >> sys.stderr, "\tERROR: %s" % err
+ print >> sys.stderr
+ print >> sys.stderr, "%d warnings found" % len(warnings)
for warn in warnings:
- print "\twarning: %s" % warn
+ print >> sys.stderr, "\twarning: %s" % warn
if errors or warnings:
return True
@@ -355,12 +380,203 @@
#------#
def do_test(args):
+
+ try:
+ opts, args = getopt.getopt(args, ACTIONS['test']['options'])
+ except getopt.error,e:
+ print "args: %s" % args
+ print >> sys.stderr, "Wrong option: %s" % e.opt
+ sys.exit(255)
+
+ do_update = False
+ do_generate = False
+ do_add = False
+ do_delete = False
+ got_html = False
+ do_html = False
+ do_print = False
+ sample_dirs = None
+ test_str = None
+ tmpl_file = None
+ html_file = None
+ pic = None
+ outfile = None
+ for o,v in opts:
+ if o == '-u':
+ do_update = True
+ elif o == '-a':
+ do_add = True
+ test_str = v
+ elif o == '-d':
+ do_delete = True
+ test_str = v
+ elif o == '-s':
+ sample_dirs = v.split(":")
+ elif o == '-f':
+ outfile = v
+ elif o == '-g':
+ do_html = True
+ tmpl_file = v
+ elif o == '-o':
+ got_html = True
+ html_file = v
+ elif o == '-p':
+ do_print = True
+ pic = v
+ else:
+ print >> sys.stderr, "Wrong option %s" % o
+ if not outfile:
+ try:
+ outfile = os.environ['JALLIB_MATRIX']
+ except KeyError:
+ print >> sys.stderr,"Please provide a file to get/store
the testing
matrix (-f option or JALLIB_MATRIX env. var)"
+ sys.exit(255)
+ if not sample_dirs:
+ v = os.environ.get('JALLIB_SAMPLEDIR',os.path.curdir)
+ sample_dirs = v.split(":")
+ if do_update:
+ update_testing_matrix(sample_dirs,outfile)
+ elif do_add:
+ add_update_test(test_str,outfile)
+ elif do_delete:
+ delete_test(test_str,outfile)
+ elif do_html and got_html:
+ generate_html(tmpl_file,html_file,outfile)
+ elif do_print:
+ display_test_results(pic,outfile)
+ else:
+ raise NotImplementedError("Specify -u, -g or -a option")
+
+def get_matrix(outfile):
# localized import: if one doesn't want to deal
# with test, don't force him to install yaml lib
import yaml
- print "do_test, args: %s" % repr(args)
+
+ # existing file or from scratch ?
+ if os.path.isfile(outfile):
+ matrix = yaml.load(file(outfile).read())
+ else:
+ matrix = {}
+ return matrix
+
+def save_matrix(matrix,outfile):
+ import yaml
+ fout = file(outfile,"w")
+ print >> fout, yaml.dump(matrix)
+ fout.close()
+
+def update_testing_matrix(sample_dirs,outfile):
+
+ matrix = get_matrix(outfile)
+
+ def analyze_samples(device,fullpathdir):
+ content = os.listdir(fullpathdir)
+ for jalfile in content:
+ if jalfile.startswith(".") or not
jalfile.endswith(".jal"):
+ continue
+ ###print "jalfile: %s (%s)" %
(jalfile,jalfile.startswith("."))
+ matrix[device]['samples'].setdefault(jalfile,{'pass' :
None})
+
+ def analyse_sampledir(dir):
+ if not "by_device" in os.listdir(dir):
+ print >> sys.stderr, "Sample dir '%s' does not contain
'by_device'
map." % dir
+ sys.exit(1)
+ for devicedir in os.listdir(os.path.join(dir,'by_device')):
+ fullpath = os.path.join(dir,'by_device',devicedir)
+ if not os.path.isdir(fullpath) or
devicedir.startswith("."):
+ continue
+ matrix.setdefault(devicedir,{'samples' : {}, 'tests' :
{}})
+
analyze_samples(devicedir,os.path.join(dir,'by_device',devicedir))
+
+ def analyse_testdir(dir):
+ if not "test" in os.listdir(dir):
+ print >> sys.stderr, "Sample dir '%s' does not contain
'test' map." %
dir
+ sys.exit(1)
+ fulldir = os.path.join(dir,"test")
+ tdirs = [os.path.join(fulldir,d) for d in os.listdir(fulldir)
if not
d.startswith(".") and d != "board"]
+ test_files = []
+ for tdir in tdirs:
+ test_files.extend([f for f in get_jal_filenames(tdir)
if
f.startswith("test_")])
+ # dispatch to devices
+ for d in matrix.keys():
+ for t in test_files:
+ matrix[d]['tests'].setdefault(t,{'pass' : None,
'board' : None})
+
+
+ for sdir in sample_dirs:
+ analyse_sampledir(sdir)
+ # Deactivate, until we can selecttively know which
+ # is available for which PIC
+ ##analyse_testdir(sdir)
+
+ save_matrix(matrix,outfile)
+
+
+def add_update_test(test_str,outfile):
+ matrix = get_matrix(outfile)
+ # TODO: check samples actually exist
+ try:
+ pic,testfile,result = test_str.split(":")
+ except ValueError:
+ print >> sys.stderr,"Please specify the result as
<pic>:<test_file>:<result> (eg. 16f88:serial_hw_echo.jal:true)"
+ sys.exit(1)
+ # normalize
+ try:
+ result = {'true':True,'false':False,'null':None}[result]
+ except KeyError,e:
+ print >> sys.stderr,"Invalid result '%s'. Specify either true,
false or
null" % e
+ sys.exit(1)
+ try:
+ samples = matrix[pic]['samples']
+ n = {'pass' : result}
+ if samples.has_key(testfile):
+ t = samples[testfile]
+ print "Update test '%s' for PIC %s: %s => %s" %
(testfile,pic,repr(t),repr(n))
+ samples[testfile] = n
+ else:
+ print "Add new test '%s' for PIC %s: %s" %
(testfile,pic,n)
+ samples[testfile] = n
+ save_matrix(matrix,outfile)
+ except KeyError,e:
+ print >> sys.stderr,"Can't find PIC %s (need to update the
matrix ?)" % e
+
+def delete_test(test_str,outfile):
+ matrix = get_matrix(outfile)
+ # TODO: check samples actually exist
+ try:
+ pic,testfile = test_str.split(":")
+ except ValueError:
+ print >> sys.stderr,"Please specify the test to remove as
<pic>:<test_file> (eg. 16f88:bad_test.jal)"
+ sys.exit(1)
+ try:
+ print "Unregistering test '%s' from PIC %s" % (testfile,pic)
+ del matrix[pic]['samples'][testfile]
+ save_matrix(matrix,outfile)
+ except KeyError,e:
+ print >> sys.stderr, "Unable to delete '%s' from PIC %s, cannot
find '%s'" % (testfile,pic,e)
+ sys.exit(1)
+
+def generate_html(tmpl_file,html_file,outfile):
+ import Cheetah.Template
+ matrix = get_matrix(outfile)
+ tmplsrc = "".join(file(tmpl_file,"r").readlines())
+ klass = Cheetah.Template.Template.compile(tmplsrc)
+ tmpl = klass()
+ tmpl.test_results = matrix
+ fout = file(html_file,"w")
+ print >> fout, tmpl.main()
+def display_test_results(pic,outfile):
+ matrix = get_matrix(outfile)
+ try:
+ print "samples:"
+ for k,v in matrix[pic]['samples'].items():
+ print " %s : %s" % (k,v['pass'])
+ except KeyError,e:
+ print >> sys.stderr, "Cant't test result for PIC %s" % e
+ sys.exit(1)
+
#############
# HELP FUNC #
#############
@@ -376,6 +592,7 @@
"""
+
def compile_help():
print """
jallib compile file.jal
@@ -400,8 +617,11 @@
path (cwd) as the root path.
Precedence: cwd < var < option
- -E path : use this option to manually set the path to jalv2
executable. If not set, except
- it to be on path.
+ -E path : use this option to manually set the path to jalv2
executable. If not set,
+ will search for a JALLIB_JALV2 environment variable, or
default to 'jalv2'
+ and expect it to be on path.
+
+(for convenience, jallib script's options are uppercased, whereas jalv2's
are lowercased)
"""
@@ -418,19 +638,43 @@
def test_help():
print """
- jallib test -U -F testing_matrix.yaml [-S path/to/sample]
+ jallib test -u -f testing_matrix.yaml [-s path/to/sample] [-g
template.tmpl -o page.html] [-p picname]
-Use this option to handle test.
+Use this option to handle the testing matrix and the test result page.
- -U: update an existing testing matrix, by searching for new samples
and tests.
- This won't erase previous testing results, but will potentially
add new test line
+ -u: update an existing testing matrix, by searching for new samples.
Tests must be
+ manually added to the testing matrix file (because tests are not
relevant to all target chips).
+ This won't erase previous testing results, but will potentially
add new sample lines
to the testing matrix file.
- -F: file storing the testing matrix results. YAML formatted
-
- -S: path to the sample directory. If no option is given, it will
expect to define
- as an environment variable, JALLIB_SAMPLEDIR
+ -a: add or update a test result. If the test does not exist, it's
added to the matrix, else
+ results will be updated.
+ The format is target:test_file:result. For example:
+ * to register a new test which passed, for 16f88
+ -a 16f88:new_test.jal:true
+ * to register a new test which failed, for 16f877
+ -a 16f877:new_test.jal:false
+ * to register a new test, not run yet, for 16f648a
+ -a 16f648a:new_test.jal:null
+
+ -p: print current test result for a given PIC
+
+ -d: delete/unregister test. The format is: target:test_file. Ex:
+ To remove a test from 16f88 device:
+ -d 16f88:bad_test.jal
+ -g: generate HTML a testing matrix from tests results, and dedicated
test result pages
+ for each PIC, from both samples and tests. Needs -W option.
+
+ -o: specify output HTML file. Used with -g option.
+
+ -f: file storing the testing matrix results. YAML formatted. If not
specified, will look for a
+ JALLIB_MATRIX environment variable.
+
+ -s: path to the sample directory (or multiple sample directory, ':'
separated). If no option is given,
+ it will expect to define as an environment variable,
JALLIB_SAMPLEDIR. If no option is given, and
+ no env. variable can be found, the current directory will be
considered.
+ The sample(s) directory(ies) *must* contain a 'by_device'
directory.
"""
@@ -448,7 +692,7 @@
ACTIONS = {
'compile' : {'callback' : do_compile, 'options' : 'R:E:',
'help' :
compile_help},
'validate' : {'callback' : do_validate, 'options' : '',
'help' :
validate_help},
- 'test' : {'callback' : do_test, 'options' : 'S:GU',
'help' : test_help},
+ 'test' : {'callback' : do_test, 'options' :
's:uf:a:g:d:o:p:', 'help' :
test_help},
'help' : {'callback' : do_help, 'options' : '', 'help'
: None},
}
@@ -460,7 +704,6 @@
action_args = sys.argv[2:]
try:
callme = ACTIONS[action]['callback']
- callme(action_args)
except KeyError,e:
if action in ('help','--help','-h'):
do_help(action_args)
@@ -468,6 +711,7 @@
else:
print "Unknown action %s" % e
sys.exit(255)
+ callme(action_args)
except IndexError,e:
- print >> sys.stderr,"Please provide an action: %s" %
repr(ACTIONS.keys())
+ print >> sys.stderr, "Please provide an action: %s" %
repr(ACTIONS.keys())
sys.exit(255)
Added: trunk/tools/testing_matrix.tmpl
==============================================================================
--- (empty file)
+++ trunk/tools/testing_matrix.tmpl Sat Oct 18 01:29:20 2008
@@ -0,0 +1,65 @@
+#def main
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html>
+ <head>
+ </head>
+ <body>
+ $content
+ </body>
+</html>
+#end def
+
+
+#def meter_eval(data):
+ #set samples = data['samples']
+ #set tests = data['tests']
+
+ #set slen = len(samples)
+ #set tlen = len(tests)
+ #set sgood = len([s for s in samples if samples[s]['pass']])
+ #set tgood = len([s for s in tests if tests[s]['pass']])
+ #set sscore = slen and float(sgood) / float(slen) or 0.0
+ #set tscore = tlen and float(tgood) / float(tlen) or 0.0
+ #set gscore = (10 * tscore + 90 * sscore) / 100.0
+ #return sscore,tscore,gscore
+
+#end def
+
+#def content
+ #set chips = sorted([k for k in $test_results.keys()])
+ #set tests = sorted(list(set([s for k in $test_results.keys() for s in
$test_results[k]['tests']])))
+ <table border=1>
+ <tr>
+ <th>Target chip</th>
+ <th>Testing meter</th>
+ #for t in tests
+ <th>$t</th>
+ #end for
+ </tr>
+ #for chip,data in sorted($test_results.items(),cmp=lambda a,b:
cmp($meter_eval($a[1])[-1],$meter_eval($b[1])[-1]),reverse=True)
+ <tr>
+ #set s,t,g = $meter_eval($data)
+ #silent s,t,g = map(lambda x: x * 100,(s,t,g))
+ <td><a href="test_${chip}.html">$chip</a></td>
+ <td>
+ ###<img
src="http://chart.apis.google.com/chart?cht=bhs&chs=200x75&chd=t:$s,$t,$g%7C100,100,100&chco=C22E30,F99393&chbh=10&chxt=x,y&chxl=1:%7Cglobal%7Ctests%7Csamples"/>
+ <img
src="http://chart.apis.google.com/chart?cht=bhs&chs=200x35&chd=t:$s%7C100&chco=C22E30,F99393&chbh=10&chxt=x,y&chxl=1:%7Cglobal"/>
+ </td>
+ #for t in tests
+ #try
+ #set res = $test_results[chip]['tests'][t]['pass']
+ #if res == True
+ <td style="background-color: green;">$res</td>
+ #elif res == False
+ <td style="background-color: red;">$res</td>
+ #else
+ <td>$res</td>
+ #end if
+ #except KeyError:
+ <td>?</td>
+ #end try
+ #end for
+ </tr>
+ #end for
+ </table>
+#end def
Added: trunk/unvalidated/sample/testing_matrix.yaml
==============================================================================
--- (empty file)
+++ trunk/unvalidated/sample/testing_matrix.yaml Sat Oct 18 01:29:20 2008
@@ -0,0 +1,1192 @@
+10f200:
+ samples:
+ b10f200.jal: {pass: null}
+ tests: {}
+10f202:
+ samples:
+ b10f202.jal: {pass: null}
+ tests: {}
+10f204:
+ samples:
+ b10f204.jal: {pass: null}
+ tests: {}
+10f206:
+ samples:
+ b10f206.jal: {pass: null}
+ tests: {}
+10f220:
+ samples:
+ b10f220.jal: {pass: null}
+ tests: {}
+10f222:
+ samples:
+ b10f222.jal: {pass: null}
+ tests: {}
+12f508:
+ samples:
+ b12f508.jal: {pass: null}
+ tests: {}
+12f509:
+ samples:
+ b12f509.jal: {pass: null}
+ tests: {}
+12f510:
+ samples:
+ b12f510.jal: {pass: null}
+ tests: {}
+12f519:
+ samples:
+ b12f519.jal: {pass: null}
+ tests: {}
+12f609:
+ samples:
+ b12f609.jal: {pass: null}
+ tests: {}
+12f615:
+ samples:
+ b12f615.jal: {pass: null}
+ tests: {}
+12f629:
+ samples:
+ b12f629.jal: {pass: null}
+ tests: {}
+12f635:
+ samples:
+ b12f635.jal: {pass: null}
+ tests: {}
+12f675:
+ samples:
+ b12f675.jal: {pass: null}
+ tests: {}
+12f683:
+ samples:
+ b12f683.jal: {pass: null}
+ tests: {}
+12hv609:
+ samples:
+ b12hv609.jal: {pass: null}
+ tests: {}
+12hv615:
+ samples:
+ b12hv615.jal: {pass: null}
+ tests: {}
+16f505:
+ samples:
+ b16f505.jal: {pass: null}
+ tests: {}
+16f506:
+ samples:
+ b16f506.jal: {pass: null}
+ tests: {}
+16f526:
+ samples:
+ b16f526.jal: {pass: null}
+ tests: {}
+16f54:
+ samples:
+ b16f54.jal: {pass: null}
+ tests: {}
+16f57:
+ samples:
+ b16f57.jal: {pass: null}
+ tests: {}
+16f610:
+ samples:
+ b16f610.jal: {pass: null}
+ tests: {}
+16f616:
+ samples:
+ b16f616.jal: {pass: null}
+ tests: {}
+16f627:
+ samples:
+ b16f627.jal: {pass: null}
+ tests: {}
+16f627a:
+ samples:
+ b16f627a.jal: {pass: null}
+ tests: {}
+16f628:
+ samples:
+ b16f628.jal: {pass: null}
+ tests: {}
+16f628a:
+ samples:
+ b16f628a.jal: {pass: null}
+ tests: {}
+16f630:
+ samples:
+ b16f630.jal: {pass: null}
+ tests: {}
+16f631:
+ samples:
+ b16f631.jal: {pass: null}
+ tests: {}
+16f636:
+ samples:
+ b16f636.jal: {pass: null}
+ tests: {}
+16f639:
+ samples:
+ b16f639.jal: {pass: null}
+ tests: {}
+16f648a:
+ samples:
+ b16f648a.jal: {pass: null}
+ tests: {}
+16f676:
+ samples:
+ b16f676.jal: {pass: null}
+ tests: {}
+16f677:
+ samples:
+ b16f677.jal: {pass: null}
+ tests: {}
+16f684:
+ samples:
+ b16f684.jal: {pass: null}
+ tests: {}
+16f685:
+ samples:
+ b16f685.jal: {pass: null}
+ tests: {}
+16f687:
+ samples:
+ b16f687.jal: {pass: null}
+ tests: {}
+16f688:
+ samples:
+ b16f688.jal: {pass: null}
+ tests: {}
+16f689:
+ samples:
+ b16f689.jal: {pass: null}
+ tests: {}
+16f690:
+ samples:
+ b16f690.jal: {pass: null}
+ tests: {}
+16f716:
+ samples:
+ b16f716.jal: {pass: null}
+ tests: {}
+16f72:
+ samples:
+ b16f72.jal: {pass: null}
+ tests: {}
+16f722:
+ samples:
+ b16f722.jal: {pass: null}
+ tests: {}
+16f723:
+ samples:
+ b16f723.jal: {pass: null}
+ tests: {}
+16f724:
+ samples:
+ b16f724.jal: {pass: null}
+ tests: {}
+16f726:
+ samples:
+ b16f726.jal: {pass: null}
+ tests: {}
+16f727:
+ samples:
+ b16f727.jal: {pass: null}
+ tests: {}
+16f73:
+ samples:
+ b16f73.jal: {pass: null}
+ tests: {}
+16f737:
+ samples:
+ b16f737.jal: {pass: null}
+ tests: {}
+16f74:
+ samples:
+ b16f74.jal: {pass: null}
+ tests: {}
+16f747:
+ samples:
+ b16f747.jal: {pass: null}
+ tests: {}
+16f76:
+ samples:
+ b16f76.jal: {pass: null}
+ tests: {}
+16f767:
+ samples:
+ b16f767.jal: {pass: null}
+ tests: {}
+16f77:
+ samples:
+ b16f77.jal: {pass: null}
+ tests: {}
+16f777:
+ samples:
+ b16f777.jal: {pass: null}
+ tests: {}
+16f785:
+ samples:
+ b16f785.jal: {pass: null}
+ tests: {}
+16f818:
+ samples:
+ b16f818.jal: {pass: null}
+ tests: {}
+16f819:
+ samples:
+ b16f819.jal: {pass: null}
+ tests: {}
+16f83:
+ samples:
+ b16f83.jal: {pass: null}
+ tests: {}
+16f84:
+ samples:
+ b16f84.jal: {pass: null}
+ tests: {}
+16f84a:
+ samples:
+ b16f84a.jal: {pass: null}
+ tests: {}
+16f87:
+ samples:
+ b16f87.jal: {pass: null}
+ tests: {}
+16f870:
+ samples:
+ b16f870.jal: {pass: null}
+ tests: {}
+16f871:
+ samples:
+ b16f871.jal: {pass: null}
+ tests: {}
+16f872:
+ samples:
+ b16f872.jal: {pass: null}
+ tests: {}
+16f873:
+ samples:
+ b16f873.jal: {pass: null}
+ tests: {}
+16f873a:
+ samples:
+ b16f873a.jal: {pass: null}
+ tests: {}
+16f874:
+ samples:
+ b16f874.jal: {pass: null}
+ tests: {}
+16f874a:
+ samples:
+ b16f874a.jal: {pass: null}
+ tests: {}
+16f876:
+ samples:
+ b16f876.jal: {pass: null}
+ tests: {}
+16f876a:
+ samples:
+ b16f876a.jal: {pass: null}
+ test_tc77.jal: {pass: null}
+ tests: {}
+16f877:
+ samples:
+ b16f877.jal: {pass: null}
+ lcd_hd44780_tmp_4_line.jal: {pass: null}
+ lcd_hd44780_tmp_8_line.jal: {pass: null}
+ lcd_st7036.jal: {pass: null}
+ rtc_ds1302.jal: {pass: null}
+ tests: {}
+16f877a:
+ samples:
+ b16f877a.jal: {pass: null}
+ hello_world_lcd.jal: {pass: null}
+ keyboard_lcd.jal: {pass: null}
+ lcd_format.jal: {pass: null}
+ print_serial_numbers.jal: {pass: null}
+ pwm_led.jal: {pass: null}
+ read_co2_t6603.jal: {pass: null}
+ test_display_hd44780_4_line.jal: {pass: null}
+ test_display_hd44780_8_line.jal: {pass: null}
+ tests: {}
+16f88:
+ samples:
+ adc_lowres.jal: {pass: true}
+ b16f88.jal: {pass: true}
+ delay_basic.jal: {pass: true}
+ print_serial_numbers.jal: {pass: true}
+ pwm_led.jal: {pass: true}
+ pwm_led_highres.jal: {pass: true}
+ pwm_sound.jal: {pass: true}
+ remember_me.jal: {pass: true}
+ serial_hw_echo.jal: {pass: true}
+ serial_hw_int_cts_echo.jal: {pass: true}
+ serial_sw_echo.jal: {pass: true}
+ tests: {}
+16f882:
+ samples:
+ b16f882.jal: {pass: null}
+ tests: {}
+16f883:
+ samples:
+ b16f883.jal: {pass: null}
+ tests: {}
+16f884:
+ samples:
+ b16f884.jal: {pass: null}
+ tests: {}
+16f886:
+ samples:
+ b16f886.jal: {pass: null}
+ tests: {}
+16f887:
+ samples:
+ b16f887.jal: {pass: null}
+ tests: {}
+16f913:
+ samples:
+ b16f913.jal: {pass: null}
+ tests: {}
+16f914:
+ samples:
+ b16f914.jal: {pass: null}
+ tests: {}
+16f916:
+ samples:
+ b16f916.jal: {pass: null}
+ tests: {}
+16f917:
+ samples:
+ b16f917.jal: {pass: null}
+ tests: {}
+16f946:
+ samples:
+ b16f946.jal: {pass: null}
+ tests: {}
+16hv540:
+ samples:
+ b16hv540.jal: {pass: null}
+ tests: {}
+16hv610:
+ samples:
+ b16hv610.jal: {pass: null}
+ tests: {}
+16hv616:
+ samples:
+ b16hv616.jal: {pass: null}
+ tests: {}
+16hv785:
+ samples:
+ b16hv785.jal: {pass: null}
+ tests: {}
+16lf722:
+ samples:
+ b16lf722.jal: {pass: null}
+ tests: {}
+16lf723:
+ samples:
+ b16lf723.jal: {pass: null}
+ tests: {}
+16lf724:
+ samples:
+ b16lf724.jal: {pass: null}
+ tests: {}
+16lf726:
+ samples:
+ b16lf726.jal: {pass: null}
+ tests: {}
+16lf727:
+ samples:
+ b16lf727.jal: {pass: null}
+ tests: {}
+18f1220:
+ samples:
+ b18f1220.jal: {pass: null}
+ tests: {}
+18f1230:
+ samples:
+ b18f1230.jal: {pass: null}
+ tests: {}
+18f1320:
+ samples:
+ b18f1320.jal: {pass: null}
+ tests: {}
+18f1330:
+ samples:
+ b18f1330.jal: {pass: null}
+ tests: {}
+18f13k22:
+ samples:
+ b18f13k22.jal: {pass: null}
+ tests: {}
+18f13k50:
+ samples:
+ b18f13k50.jal: {pass: null}
+ tests: {}
+18f14k22:
+ samples:
+ b18f14k22.jal: {pass: null}
+ tests: {}
+18f14k50:
+ samples:
+ b18f14k50.jal: {pass: null}
+ tests: {}
+18f2220:
+ samples:
+ b18f2220.jal: {pass: null}
+ tests: {}
+18f2221:
+ samples:
+ b18f2221.jal: {pass: null}
+ tests: {}
+18f2320:
+ samples:
+ b18f2320.jal: {pass: null}
+ tests: {}
+18f2321:
+ samples:
+ b18f2321.jal: {pass: null}
+ tests: {}
+18f2331:
+ samples:
+ b18f2331.jal: {pass: null}
+ tests: {}
+18f2410:
+ samples:
+ b18f2410.jal: {pass: null}
+ tests: {}
+18f242:
+ samples:
+ b18f242.jal: {pass: null}
+ tests: {}
+18f2420:
+ samples:
+ b18f2420.jal: {pass: null}
+ tests: {}
+18f2423:
+ samples:
+ b18f2423.jal: {pass: null}
+ tests: {}
+18f2431:
+ samples:
+ b18f2431.jal: {pass: null}
+ tests: {}
+18f2439:
+ samples:
+ b18f2439.jal: {pass: null}
+ tests: {}
+18f2450:
+ samples:
+ b18f2450.jal: {pass: null}
+ tests: {}
+18f2455:
+ samples:
+ b18f2455.jal: {pass: null}
+ tests: {}
+18f2458:
+ samples:
+ b18f2458.jal: {pass: null}
+ tests: {}
+18f248:
+ samples:
+ b18f248.jal: {pass: null}
+ tests: {}
+18f2480:
+ samples:
+ b18f2480.jal: {pass: null}
+ tests: {}
+18f24j10:
+ samples:
+ b18f24j10.jal: {pass: null}
+ tests: {}
+18f24j11:
+ samples:
+ b18f24j11.jal: {pass: null}
+ tests: {}
+18f24j50:
+ samples:
+ b18f24j50.jal: {pass: null}
+ tests: {}
+18f24k20:
+ samples:
+ b18f24k20.jal: {pass: null}
+ tests: {}
+18f2510:
+ samples:
+ b18f2510.jal: {pass: null}
+ tests: {}
+18f2515:
+ samples:
+ b18f2515.jal: {pass: null}
+ tests: {}
+18f252:
+ samples:
+ b18f252.jal: {pass: null}
+ tests: {}
+18f2520:
+ samples:
+ b18f2520.jal: {pass: null}
+ tests: {}
+18f2523:
+ samples:
+ b18f2523.jal: {pass: null}
+ tests: {}
+18f2525:
+ samples:
+ b18f2525.jal: {pass: null}
+ tests: {}
+18f2539:
+ samples:
+ b18f2539.jal: {pass: null}
+ tests: {}
+18f2550:
+ samples:
+ b18f2550.jal: {pass: null}
+ tests: {}
+18f2553:
+ samples:
+ b18f2553.jal: {pass: null}
+ tests: {}
+18f258:
+ samples:
+ b18f258.jal: {pass: null}
+ tests: {}
+18f2580:
+ samples:
+ b18f2580.jal: {pass: null}
+ tests: {}
+18f2585:
+ samples:
+ b18f2585.jal: {pass: null}
+ tests: {}
+18f25j10:
+ samples:
+ b18f25j10.jal: {pass: null}
+ tests: {}
+18f25j11:
+ samples:
+ b18f25j11.jal: {pass: null}
+ tests: {}
+18f25j50:
+ samples:
+ b18f25j50.jal: {pass: null}
+ tests: {}
+18f25k20:
+ samples:
+ b18f25k20.jal: {pass: null}
+ tests: {}
+18f2610:
+ samples:
+ b18f2610.jal: {pass: null}
+ tests: {}
+18f2620:
+ samples:
+ b18f2620.jal: {pass: null}
+ tests: {}
+18f2680:
+ samples:
+ b18f2680.jal: {pass: null}
+ tests: {}
+18f2682:
+ samples:
+ b18f2682.jal: {pass: null}
+ tests: {}
+18f2685:
+ samples:
+ b18f2685.jal: {pass: null}
+ tests: {}
+18f26j11:
+ samples:
+ b18f26j11.jal: {pass: null}
+ tests: {}
+18f26j50:
+ samples:
+ b18f26j50.jal: {pass: null}
+ tests: {}
+18f26k20:
+ samples:
+ b18f26k20.jal: {pass: null}
+ tests: {}
+18f4220:
+ samples:
+ b18f4220.jal: {pass: null}
+ tests: {}
+18f4221:
+ samples:
+ b18f4221.jal: {pass: null}
+ tests: {}
+18f4320:
+ samples:
+ b18f4320.jal: {pass: null}
+ tests: {}
+18f4321:
+ samples:
+ b18f4321.jal: {pass: null}
+ tests: {}
+18f4331:
+ samples:
+ b18f4331.jal: {pass: null}
+ tests: {}
+18f4410:
+ samples:
+ b18f4410.jal: {pass: null}
+ tests: {}
+18f442:
+ samples:
+ b18f442.jal: {pass: null}
+ tests: {}
+18f4420:
+ samples:
+ b18f4420.jal: {pass: null}
+ tests: {}
+18f4423:
+ samples:
+ b18f4423.jal: {pass: null}
+ tests: {}
+18f4431:
+ samples:
+ b18f4431.jal: {pass: null}
+ tests: {}
+18f4439:
+ samples:
+ b18f4439.jal: {pass: null}
+ tests: {}
+18f4450:
+ samples:
+ b18f4450.jal: {pass: null}
+ tests: {}
+18f4455:
+ samples:
+ b18f4455.jal: {pass: null}
+ tests: {}
+18f4458:
+ samples:
+ b18f4458.jal: {pass: null}
+ tests: {}
+18f448:
+ samples:
+ b18f448.jal: {pass: null}
+ tests: {}
+18f4480:
+ samples:
+ b18f4480.jal: {pass: null}
+ tests: {}
+18f44j10:
+ samples:
+ b18f44j10.jal: {pass: null}
+ tests: {}
+18f44j11:
+ samples:
+ b18f44j11.jal: {pass: null}
+ tests: {}
+18f44j50:
+ samples:
+ b18f44j50.jal: {pass: null}
+ tests: {}
+18f44k20:
+ samples:
+ b18f44k20.jal: {pass: null}
+ tests: {}
+18f4510:
+ samples:
+ b18f4510.jal: {pass: null}
+ tests: {}
+18f4515:
+ samples:
+ b18f4515.jal: {pass: null}
+ tests: {}
+18f452:
+ samples:
+ b18f452.jal: {pass: null}
+ tests: {}
+18f4520:
+ samples:
+ b18f4520.jal: {pass: null}
+ tests: {}
+18f4523:
+ samples:
+ b18f4523.jal: {pass: null}
+ tests: {}
+18f4525:
+ samples:
+ b18f4525.jal: {pass: null}
+ tests: {}
+18f4539:
+ samples:
+ b18f4539.jal: {pass: null}
+ tests: {}
+18f4550:
+ samples:
+ b18f4550.jal: {pass: null}
+ tests: {}
+18f4553:
+ samples:
+ b18f4553.jal: {pass: null}
+ tests: {}
+18f458:
+ samples:
+ b18f458.jal: {pass: null}
+ tests: {}
+18f4580:
+ samples:
+ b18f4580.jal: {pass: null}
+ tests: {}
+18f4585:
+ samples:
+ b18f4585.jal: {pass: null}
+ tests: {}
+18f45j10:
+ samples:
+ b18f45j10.jal: {pass: null}
+ tests: {}
+18f45j11:
+ samples:
+ b18f45j11.jal: {pass: null}
+ tests: {}
+18f45j50:
+ samples:
+ b18f45j50.jal: {pass: null}
+ tests: {}
+18f45k20:
+ samples:
+ b18f45k20.jal: {pass: null}
+ tests: {}
+18f4610:
+ samples:
+ b18f4610.jal: {pass: null}
+ tests: {}
+18f4620:
+ samples:
+ b18f4620.jal: {pass: null}
+ tests: {}
+18f4680:
+ samples:
+ b18f4680.jal: {pass: null}
+ tests: {}
+18f4682:
+ samples:
+ b18f4682.jal: {pass: null}
+ tests: {}
+18f4685:
+ samples:
+ b18f4685.jal: {pass: null}
+ tests: {}
+18f46j11:
+ samples:
+ b18f46j11.jal: {pass: null}
+ tests: {}
+18f46j50:
+ samples:
+ b18f46j50.jal: {pass: null}
+ tests: {}
+18f46k20:
+ samples:
+ b18f46k20.jal: {pass: null}
+ tests: {}
+18f6310:
+ samples:
+ b18f6310.jal: {pass: null}
+ tests: {}
+18f6390:
+ samples:
+ b18f6390.jal: {pass: null}
+ tests: {}
+18f6393:
+ samples:
+ b18f6393.jal: {pass: null}
+ tests: {}
+18f63j11:
+ samples:
+ b18f63j11.jal: {pass: null}
+ tests: {}
+18f63j90:
+ samples:
+ b18f63j90.jal: {pass: null}
+ tests: {}
+18f6410:
+ samples:
+ b18f6410.jal: {pass: null}
+ tests: {}
+18f6490:
+ samples:
+ b18f6490.jal: {pass: null}
+ tests: {}
+18f6493:
+ samples:
+ b18f6493.jal: {pass: null}
+ tests: {}
+18f64j11:
+ samples:
+ b18f64j11.jal: {pass: null}
+ tests: {}
+18f64j90:
+ samples:
+ b18f64j90.jal: {pass: null}
+ tests: {}
+18f6520:
+ samples:
+ b18f6520.jal: {pass: null}
+ tests: {}
+18f6525:
+ samples:
+ b18f6525.jal: {pass: null}
+ tests: {}
+18f6527:
+ samples:
+ b18f6527.jal: {pass: null}
+ tests: {}
+18f6585:
+ samples:
+ b18f6585.jal: {pass: null}
+ tests: {}
+18f65j10:
+ samples:
+ b18f65j10.jal: {pass: null}
+ tests: {}
+18f65j11:
+ samples:
+ b18f65j11.jal: {pass: null}
+ tests: {}
+18f65j15:
+ samples:
+ b18f65j15.jal: {pass: null}
+ tests: {}
+18f65j50:
+ samples:
+ b18f65j50.jal: {pass: null}
+ tests: {}
+18f65j90:
+ samples:
+ b18f65j90.jal: {pass: null}
+ tests: {}
+18f6620:
+ samples:
+ b18f6620.jal: {pass: null}
+ tests: {}
+18f6621:
+ samples:
+ b18f6621.jal: {pass: null}
+ tests: {}
+18f6622:
+ samples:
+ b18f6622.jal: {pass: null}
+ tests: {}
+18f6627:
+ samples:
+ b18f6627.jal: {pass: null}
+ tests: {}
+18f6628:
+ samples:
+ b18f6628.jal: {pass: null}
+ tests: {}
+18f6680:
+ samples:
+ b18f6680.jal: {pass: null}
+ tests: {}
+18f66j10:
+ samples:
+ b18f66j10.jal: {pass: null}
+ tests: {}
+18f66j11:
+ samples:
+ b18f66j11.jal: {pass: null}
+ tests: {}
+18f66j15:
+ samples:
+ b18f66j15.jal: {pass: null}
+ tests: {}
+18f66j16:
+ samples:
+ b18f66j16.jal: {pass: null}
+ tests: {}
+18f66j50:
+ samples:
+ b18f66j50.jal: {pass: null}
+ tests: {}
+18f66j55:
+ samples:
+ b18f66j55.jal: {pass: null}
+ tests: {}
+18f66j60:
+ samples:
+ b18f66j60.jal: {pass: null}
+ tests: {}
+18f66j65:
+ samples:
+ b18f66j65.jal: {pass: null}
+ tests: {}
+18f6720:
+ samples:
+ b18f6720.jal: {pass: null}
+ tests: {}
+18f6722:
+ samples:
+ b18f6722.jal: {pass: null}
+ tests: {}
+18f6723:
+ samples:
+ b18f6723.jal: {pass: null}
+ tests: {}
+18f67j10:
+ samples:
+ b18f67j10.jal: {pass: null}
+ tests: {}
+18f67j11:
+ samples:
+ b18f67j11.jal: {pass: null}
+ tests: {}
+18f67j50:
+ samples:
+ b18f67j50.jal: {pass: null}
+ tests: {}
+18f67j60:
+ samples:
+ b18f67j60.jal: {pass: null}
+ tests: {}
+18f8310:
+ samples:
+ b18f8310.jal: {pass: null}
+ tests: {}
+18f8390:
+ samples:
+ b18f8390.jal: {pass: null}
+ tests: {}
+18f8393:
+ samples:
+ b18f8393.jal: {pass: null}
+ tests: {}
+18f83j11:
+ samples:
+ b18f83j11.jal: {pass: null}
+ tests: {}
+18f83j90:
+ samples:
+ b18f83j90.jal: {pass: null}
+ tests: {}
+18f8410:
+ samples:
+ b18f8410.jal: {pass: null}
+ tests: {}
+18f8490:
+ samples:
+ b18f8490.jal: {pass: null}
+ tests: {}
+18f8493:
+ samples:
+ b18f8493.jal: {pass: null}
+ tests: {}
+18f84j11:
+ samples:
+ b18f84j11.jal: {pass: null}
+ tests: {}
+18f84j90:
+ samples:
+ b18f84j90.jal: {pass: null}
+ tests: {}
+18f8520:
+ samples:
+ b18f8520.jal: {pass: null}
+ tests: {}
+18f8525:
+ samples:
+ b18f8525.jal: {pass: null}
+ tests: {}
+18f8527:
+ samples:
+ b18f8527.jal: {pass: null}
+ tests: {}
+18f8585:
+ samples:
+ b18f8585.jal: {pass: null}
+ tests: {}
+18f85j10:
+ samples:
+ b18f85j10.jal: {pass: null}
+ tests: {}
+18f85j11:
+ samples:
+ b18f85j11.jal: {pass: null}
+ tests: {}
+18f85j15:
+ samples:
+ b18f85j15.jal: {pass: null}
+ tests: {}
+18f85j50:
+ samples:
+ b18f85j50.jal: {pass: null}
+ tests: {}
+18f85j90:
+ samples:
+ b18f85j90.jal: {pass: null}
+ tests: {}
+18f8620:
+ samples:
+ b18f8620.jal: {pass: null}
+ tests: {}
+18f8621:
+ samples:
+ b18f8621.jal: {pass: null}
+ tests: {}
+18f8622:
+ samples:
+ b18f8622.jal: {pass: null}
+ tests: {}
+18f8627:
+ samples:
+ b18f8627.jal: {pass: null}
+ tests: {}
+18f8628:
+ samples:
+ b18f8628.jal: {pass: null}
+ tests: {}
+18f8680:
+ samples:
+ b18f8680.jal: {pass: null}
+ tests: {}
+18f86j10:
+ samples:
+ b18f86j10.jal: {pass: null}
+ tests: {}
+18f86j11:
+ samples:
+ b18f86j11.jal: {pass: null}
+ tests: {}
+18f86j15:
+ samples:
+ b18f86j15.jal: {pass: null}
+ tests: {}
+18f86j16:
+ samples:
+ b18f86j16.jal: {pass: null}
+ tests: {}
+18f86j50:
+ samples:
+ b18f86j50.jal: {pass: null}
+ tests: {}
+18f86j55:
+ samples:
+ b18f86j55.jal: {pass: null}
+ tests: {}
+18f86j60:
+ samples:
+ b18f86j60.jal: {pass: null}
+ tests: {}
+18f86j65:
+ samples:
+ b18f86j65.jal: {pass: null}
+ tests: {}
+18f8720:
+ samples:
+ b18f8720.jal: {pass: null}
+ tests: {}
+18f8722:
+ samples:
+ b18f8722.jal: {pass: null}
+ tests: {}
+18f8723:
+ samples:
+ b18f8723.jal: {pass: null}
+ tests: {}
+18f87j10:
+ samples:
+ b18f87j10.jal: {pass: null}
+ tests: {}
+18f87j11:
+ samples:
+ b18f87j11.jal: {pass: null}
+ tests: {}
+18f87j50:
+ samples:
+ b18f87j50.jal: {pass: null}
+ tests: {}
+18f87j60:
+ samples:
+ b18f87j60.jal: {pass: null}
+ tests: {}
+18f96j60:
+ samples:
+ b18f96j60.jal: {pass: null}
+ tests: {}
+18f96j65:
+ samples:
+ b18f96j65.jal: {pass: null}
+ tests: {}
+18f97j60:
+ samples:
+ b18f97j60.jal: {pass: null}
+ tests: {}
+18lf13k50:
+ samples:
+ b18lf13k50.jal: {pass: null}
+ tests: {}
+18lf14k50:
+ samples:
+ b18lf14k50.jal: {pass: null}
+ tests: {}
+18lf24j10:
+ samples:
+ b18lf24j10.jal: {pass: null}
+ tests: {}
+18lf24j11:
+ samples:
+ b18lf24j11.jal: {pass: null}
+ tests: {}
+18lf24j50:
+ samples:
+ b18lf24j50.jal: {pass: null}
+ tests: {}
+18lf25j10:
+ samples:
+ b18lf25j10.jal: {pass: null}
+ tests: {}
+18lf25j11:
+ samples:
+ b18lf25j11.jal: {pass: null}
+ tests: {}
+18lf25j50:
+ samples:
+ b18lf25j50.jal: {pass: null}
+ tests: {}
+18lf26j11:
+ samples:
+ b18lf26j11.jal: {pass: null}
+ tests: {}
+18lf26j50:
+ samples:
+ b18lf26j50.jal: {pass: null}
+ tests: {}
+18lf44j10:
+ samples:
+ b18lf44j10.jal: {pass: null}
+ tests: {}
+18lf44j11:
+ samples:
+ b18lf44j11.jal: {pass: null}
+ tests: {}
+18lf44j50:
+ samples:
+ b18lf44j50.jal: {pass: null}
+ tests: {}
+18lf45j10:
+ samples:
+ b18lf45j10.jal: {pass: null}
+ tests: {}
+18lf45j11:
+ samples:
+ b18lf45j11.jal: {pass: null}
+ tests: {}
+18lf45j50:
+ samples:
+ b18lf45j50.jal: {pass: null}
+ tests: {}
+18lf46j11:
+ samples:
+ b18lf46j11.jal: {pass: null}
+ tests: {}
+18lf46j50:
+ samples:
+ b18lf46j50.jal: {pass: null}
+ tests: {}
+
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"jallib" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/jallib?hl=en
-~----------~----~----~----~------~----~------~--~---