OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [or1ksim/] [testsuite/] [lib/] [or1ksim.exp] - Diff between revs 95 and 104

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 95 Rev 104
Line 55... Line 55...
    eval "spawn $command_line"
    eval "spawn $command_line"
 
 
    # Try each matchstr in turn, counting the lines for error reporting
    # Try each matchstr in turn, counting the lines for error reporting
    set match_line 0;
    set match_line 0;
 
 
 
    # The tests for Or1ksim are generally monolithic, with each line of output
 
    # matched representing a pass. This is different to the tests for the
 
    # library, which are each small and individual.
    foreach matchstr $match_list {
    foreach matchstr $match_list {
 
 
        set match_line [expr {$match_line + 1}];
        set match_line [expr {$match_line + 1}];
 
 
#       send_user "matching |$matchstr|\n";
        # Each matchstring corresponds to a pass, unless its first character
 
        # is '!', indicating a string which must match (without its '!'), but
 
        # does not count towards the pass rate.
 
        set first_ch [string index $matchstr 0]
 
 
        expect {
        if { $first_ch == "!" } {
 
            # A line to ignore
 
            set matchlen [string length $matchstr]
 
            set last_index [expr {$matchlen - 1}]
 
            set matchstr [string range $matchstr 1 $last_index]
 
 
            $matchstr {
            if { $verbose > 2 } {
                # String to match. Silently accept. Do first, so we can match
                send_user "ignorning |$matchstr|\n";
                # specific warnings or errors if desired
            }
            }
            }
 
 
            -re "Warning" {
        if { $verbose > 2 } {
                fail "$testname: warning: $expect_out(buffer)";
            send_user "matching |$matchstr|\n";
 
        }
 
 
 
        # The matching is slightly tricky. In general we want to find warnings
 
        # or errors. However expect will look at the entire buffer, so if we
 
        # have the match string *after* an error or warning message, then the
 
        # match will still work OK.
 
 
 
        # The trick is to do some post-processing of the matched buffer to see
 
        # if there was a preceding Warning or ERROR message.
 
 
 
        expect {
 
            -ex $matchstr {
 
                set matchlen [string length $matchstr]
 
                set buflen [string length $expect_out(buffer)]
 
                set lastch [expr {$buflen - $matchlen}]
 
                set prefix [string range $expect_out(buffer) 0 $lastch]
 
 
 
                if { [string match *ERROR* $prefix] } {
 
                    # We skipped an error
 
                    fail "$testname: ERROR seeking match line $match_line";
                return
                return
 
                } elseif { [string match *Warning* $prefix] } {
 
                    # We skipped a warning
 
                    fail "$testname: Warning seeking match line $match_line";
 
                    return;
 
                } elseif { $first_ch != "!" } {
 
                    # If we match we have a pass, unless we were asked to
 
                    # ignore.
 
                    pass "$testname: $matchstr"
 
                }
 
                # Everything else skip silently
            }
            }
 
 
            -re "ERROR" {
            ERROR {
                fail "$testname: error: $expect_out(buffer)";
                # An error other than the one we seek
 
                fail "$testname: ERROR seeking match line $match_line";
                return
                return
            }
            }
 
 
 
            Warning {
 
                # Any warning
 
                fail "$testname: Warning seeking match line $match_line";
 
                return;
 
            }
 
 
            eof {
            eof {
                fail "$testname: hit EOF seeking match line $match_line";
                fail "$testname: hit EOF seeking match line $match_line";
                return
                return
            }
            }
 
 
            timeout {
            timeout {
 
                perror "Timeout";
                unresolved "$testname: timeout";
                unresolved "$testname: timeout";
                return
                return
            }
            }
        }
        }
    }
    }
 
 
    # If we get here we've passed
    # If we get here we've passed the whole test. No need to report anything
    pass $testname;
    # else.
 
 
}
}
 
 
# Timeout 3 seconds is plenty as default
# Timeout 3 seconds is plenty as default
set timeout 3
set timeout 3

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.