From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29971 invoked by alias); 1 Oct 2003 18:29:44 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 29950 invoked from network); 1 Oct 2003 18:29:42 -0000 Received: from unknown (HELO localhost.redhat.com) (207.219.125.105) by sources.redhat.com with SMTP; 1 Oct 2003 18:29:42 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 3C1012B89; Wed, 1 Oct 2003 14:29:42 -0400 (EDT) Message-ID: <3F7B1D16.4010009@redhat.com> Date: Wed, 01 Oct 2003 18:29:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030820 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Michael Elizabeth Chastain , carlton@kealia.com Cc: jimb@redhat.com, fnasser@redhat.com, gdb-patches@sources.redhat.com Subject: Re: RFA: Don't include value of expression in pc-fp.exp test name References: <200310011644.h91Gifql013894@duracef.shout.net> Content-Type: multipart/mixed; boundary="------------020706010201040704070603" X-SW-Source: 2003-10/txt/msg00006.txt.bz2 This is a multi-part message in MIME format. --------------020706010201040704070603 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1615 > ac> As Michael well knows, supplemental information, such as which specific > ac> branch of a test passed or failed can be included in paren in the test > ac> message. Any analysis tools comparing test results needs to accomodate > ac> this convention. > > I don't know any such convention. Michael, you and I had an e-mail exchange about this very issue. The end result, last time, was no change. > I'm looking at a typical gdb.sum. > There are 1523 instances of '(...)' in 112 different test scripts. > Most of these are part of the test name. To split hairs, I can see two cases: - two runs within identical environments I can see 'diff -u' reasonably working here. - two runs within different environments After paren stripping the results should be identical (or close two it). For instance sizeof.exp contains various tests to check that sizes are sane. The actual sizes found are included in the output. That's fine since if the numbers were to change between runs the test results are pretty sunk. Thanks to the advent of PIE (position independant code) it's now possible for the PC/FP to change between "100% identical" runs. So for this specific case, what ever. David, I've attached a script (repost). It's what Michael tables started out using but have likely since been completly rewritten. Andrew > If you want to promulgate such a convention, put it in the docs, > and I'll start submitting patches to change all these test scripts, > or committing them as obvious fixes. > > A better path would be to pick a character sequence which is unused, > such as '// ...'. > --------------020706010201040704070603 Content-Type: text/plain; name="do-analize-tests" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="do-analize-tests" Content-length: 7904 #!/bin/sh if awk --version < /dev/null 2>&1 | grep -i gnu > /dev/null then AWK=awk else AWK=gawk fi $AWK ' function trace (msg) { print msg >> "/dev/stderr" } # returns a SUPSEP separated list created by sorting TABLE. function qsort (table, middle, tmp, left, nr_left, right, nr_right, result) { middle = "" for (middle in table) { break; } nr_left = 0; nr_right = 0; for (tmp in table) { if (tmp < middle) { nr_left++ left[tmp] = tmp } else if (tmp > middle) { nr_right++ right[tmp] = tmp } } #print "qsort " nr_left " " middle " " nr_right > "/dev/stderr" result = "" if (nr_left > 0) { result = qsort(left) SUBSEP } result = result middle if (nr_right > 0) { result = result SUBSEP qsort(right) } return result } function print_headings (html_p, file, title, target, i) { if (html_p) { printf "" >> file } printf title >> file if (html_p) { printf "" >> file } for (i = 1; i <= nr_targets; i++) { target = sorted_targets[i] if (html_p) { printf "" i "
" target "" >> file } else { printf "\t" i >> file } } if (html_p) { printf "" >> file } printf "\n" >> file } function print_test (file, test, nr, i) { printf "" >> file printf "%d", nr >> file printf "%s", test >> file for (i = 1; i <= nr_targets; i++) { target = sorted_targets[i]; result = results[target, test] if (result == "FAIL") { printf "%s", result >> file } else { printf "%s", result >> file } } printf "\n" >> file } function print_totals (html_p, file, status, target, i, j) { for (i = 1; i <= nr_statuses; i++) { status = sorted_statuses[i]; if (html_p) { printf "" >> file } printf status >> file if (html_p) { printf "" >> file } for (j = 1; j <= nr_targets; j++) { target = sorted_targets[j]; if (html_p) { printf "" >> file } else { printf "\t" } printf totals[target, status] >> file if (html_p) { printf "" >> file } } if (html_p) { printf "" >> file } printf "\n" >> file } } function print_contents (html_p, file, i, j, target, status) { if (html_p) print "" >> file if (html_p) printf "" >> file for (j = 1; j <= nr_statuses; j++) { status = sorted_statuses[j]; if (html_p) printf "" >> file } if (html_p) printf "" >> file printf "\n" >> file if (html_p) printf "" >> file for (i = 1; i <= nr_targets; i++) { target = sorted_targets[i] if (html_p) printf "" >> file if (html_p) printf "" >> file for (j = 1; j <= nr_statuses; j++) { status = sorted_statuses[j]; if (html_p) printf "" >> file } if (html_p) printf "" >> file if (html_p) printf "" >> file if (html_p) printf "" >> file printf "\n" >> file } if (html_p) print "
" >> file printf "Index" >> file if (html_p) printf "" >> file printf "\t%s", status >> file if (html_p) printf "VariantFile
" >> file printf "%d", i >> file if (html_p) printf "" >> file printf "\t%d", totals[target, status] >> file if (html_p) printf "" >> file printf "\t%s", target >> file if (html_p) printf "" >> file printf " %s", target_file[target] >> file if (html_p) printf "
" >> file } function print_begin (file, title, full_title, i, j, target, status) { full_title = "Failure Table: " title; trace("Generating " file " (" full_title ")") printf "" > file print "" >> file print "" >> file print "" full_title "" >> file print "" >> file print "" >> file print "

" full_title "

" >> file print "
" >> file print_contents(1, file) print "
" >> file } function print_end (file) { print "" >> file print "" >> file } function print_opening (file, title) { print_begin(file, title); print "" >> file print_headings(1, file, title); print_totals(1, file); } function print_closing (file, title, nr) { trace(title ": " nr); print_totals(1, file); print_headings(1, file, title); print "
" >> file print_end(file); } BEGIN { nr_runs = 0 } /Running target/ { nr_runs++ sub (/Running target/, ""); gsub (/ /, ""); gsub (/\//, " "); nr = 1; do { target = $0 " (" nr++ ")"; } while (target in targets) targets[target] = target target_file[target] = FILENAME trace("Parsing " nr_runs ": " target " " (target_file[target])); next } # Collect up sizeof??? # Collect the results (does this work?) /^((|X|K)(PASS|FAIL)|UNRESOLVED|ERROR|WARNING):/ { # accumulate statuses status = $0 sub (/:.*$/, "", status) statuses[status] = status # accumulate tests test = $0 sub (/^[A-Z]*: /, "", test) gsub (/ *\([^)]*\)/, "", test) gsub (/ \/[^ ]*\/gdb\//, " ..../gdb/", test) tests[test] = test # accumulate result counts totals[target, status] += 1; results[target, test] = status; totals[test, status] += 1; } END { # sort the test names trace("Sorting results") nr_tests = split (qsort(tests), sorted_tests, SUBSEP); trace("Number of tests " nr_tests) # for (i = 0; i < nr_tests; i++) { # print i " " sorted_tests[i] > "/dev/stderr" # } nr_targets = split (qsort(targets), sorted_targets, SUBSEP); nr_statuses = split (qsort(statuses), sorted_statuses, SUBSEP); print_contents(0, "/dev/stderr") print_headings(0, "/dev/stderr", "Summary") print_totals(0, "/dev/stderr") ### file = "index.html" print_begin(file, "Contents") print "
" >> file print "Passes" >> file print "Failures" >> file print "Differences" >> file print "
" >> file print_end(file) #### # heading file = "diff.html" print_opening(file, "Differences"); # body - differences nr = 0 for (i = 1; i <= nr_tests; i++) { test = sorted_tests[i]; different = 0; fail = 0; result = ""; for (target in targets) { if (result == "") { result = results[target, test]; } else if (result != results[target, test]) { different = 1 } if (results[target, test] == "FAIL") { fail = 1; } # print "TEST=" test, "different=" different, "fail=" fail, "result=" result > "/dev/stderr" } if (different) { print_test(file, test, ++nr); } } print_closing(file, "Differences", nr); #### file = "fail.html" print_opening(file, "Failures"); # body - failures nr = 0 for (i = 1; i <= nr_tests; i++) { test = sorted_tests[i] if (totals[test, "FAIL"] > 0) { print_test(file, test, ++nr); } } print_closing(file, "Failures", nr); #### file = "pass.html" print_opening(file, "Passes"); # body - passes nr = 0 for (i = 1; i <= nr_tests; i++) { test = sorted_tests[i] if (totals[test, "PASS"] > 0) { print_test(file, test, ++nr); } } print_closing(file, "Passes", nr); } ' "$@" --------------020706010201040704070603--