#!/usr/bin/tclsh

# Copyright 2019 Alain Dargelas
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


proc printHelp {} {
    puts "regression.tcl help"
    puts "regression.tcl tests=<testname>                  (Tests matching regular expression)"
    puts "               test=<testname>                   (Just that test)"
    puts "               debug=<none, valgrind, ddd>"
    puts "               build=<Debug, Release>"
    puts "               mt=<nbThreads>"
    puts "               large                             (large tests too)"
    puts "               show_diff                         (Shows text diff)"
    puts "               diff_mode                         (Only diff)"
    puts "regression.tcl update (Updates the diffs)"
}


proc log { text } {
    global LOG_FILE
    puts $text
    flush stdout
    if ![info exist LOG_FILE] {
	set LOG_FILE [open regression.log "w"]
    }
    puts $LOG_FILE $text
    flush $LOG_FILE
}

proc log_nonewline { text } {
    global LOG_FILE
    puts -nonewline $text
    flush stdout
    if ![info exist LOG_FILE] {
	set LOG_FILE [open regression.log "w"]
    }
    puts -nonewline $LOG_FILE $text
    flush $LOG_FILE
}

set UPDATE 0
set TIME "/usr/bin/time"
set DEBUG_TOOL ""
set PRIOR_USER 0
set PRIOR_ELAPSED 0
set USER 0
set ELAPSED 0
set PRIOR_MAX_MEM 0
set MAX_MEM 0
set PRIOR_MAX_TIME 0
set MAX_TIME 0
set DEBUG "none"
set MT_MAX 0
set LARGE_TESTS 0
set SHOW_DIFF 0
set DIFF_MODE 0

# Large tests (need to run on 5Gb RAM machine)
set LONG_TESTS(YosysOpenSparc) 1
set LONG_TESTS(YosysOldTests) 1
set LONG_TESTS(YosysRiscv) 1
set LONG_TESTS(YosysBigSim) 1
set LONG_TESTS(YosysBoom) 1
set LONG_TESTS(YosysEth) 1
set LONG_TESTS(YosysIce40) 1
set LONG_TESTS(YosysBigSimEllip) 1
set LONG_TESTS(YosysTests) 1
set LONG_TESTS(YosysBigSimBch) 1

# Noisy test
# These tests need to be investigated
# They produce different number of messages on Travis-CI
set LONG_TESTS(YosysTestSuite) 1
set LONG_TESTS(SimpleParserTestCache) 1
set LONG_TESTS(Zachjs) 1
set LONG_TESTS(YosysOldI2c) 1
set LONG_TESTS(YosysOldI2c) 1
set LONG_TESTS(YosysOldSimpleSpi) 1
set LONG_TESTS(YosysOldAes) 1
set LONG_TESTS(YosysOldSpi) 1
set LONG_TESTS(YosysOldSystem) 1
set LONG_TESTS(Google) 1
set LONG_TESTS(GoogleMT) 1
set LONG_TESTS(UnitElabExternNested) 1

if [regexp {show_diff}  $argv] {
    regsub "show_diff" $argv "" argv
    set SHOW_DIFF 1
}

if [regexp {diff_mode}  $argv] {
    regsub "diff_mode" $argv "" argv
    set DIFF_MODE 1
}


if [regexp {large}  $argv] {
    set LARGE_TESTS 1
    log "Running large tests"
} else {
    log "Skipping large tests"
}

if [regexp {mt=([0-9]+)} $argv tmp MT_MAX] {
}

if [regexp {debug=([a-z]+)} $argv tmp DEBUG] {
    if {$DEBUG == "valgrind"} {
	set DEBUG_TOOL "valgrind --tool=memcheck --log-file=valgrind.log"
    }
    if {$DEBUG == "ddd"} {
	set DEBUG_TOOL "ddd"
    }
}

if {$argv == "help"} {
    printHelp
    exit
}

set TESTTARGET ""
set ONETEST ""
if [regexp {tests=([A-Za-z0-9_]+)} $argv tmp TESTTARGET] {
}
if [regexp {test=([A-Za-z0-9_]+)} $argv tmp TESTTARGET] {
    set ONETEST $TESTTARGET
}

set BUILD "Release"
if [regexp {build=([A-Za-z0-9_]+)} $argv tmp BUILD] {
}

set SHOW_DETAILS 0
if [regexp {\-details} $argv] {
    set SHOW_DETAILS 1
}

if [regexp {update} $argv] {
    set UPDATE 1
}

set COMMIT_TEXT ""
if [regexp {commit=([A-Za-z0-9_ \.]+)} $argv tmp COMMIT_TEXT] {
}

set SURELOG_VERSION "[pwd]/dist/Release/surelog"
set REGRESSION_PATH [pwd]

set SURELOG_COMMAND "$TIME $DEBUG_TOOL $SURELOG_VERSION"

proc findFiles { basedir pattern } {

    # Fix the directory name, this ensures the directory name is in the
    # native format for the platform and contains a final directory seperator
    set basedir [string trimright [file join [file normalize $basedir] { }]]
    set fileList {}

    # Look in the current directory for matching files, -type {f r}
    # means ony readable normal files are looked at, -nocomplain stops
    # an error being thrown if the returned list is empty
    foreach fileName [glob -nocomplain -type {f r} -path $basedir $pattern] {
        lappend fileList $fileName
    }

    # Now look for any sub direcories in the current directory
    foreach dirName [glob -nocomplain -type {d  r} -path $basedir *] {
        # Recusively call the routine on the sub directory and append any
        # new files to the results
        set subDirList [findFiles $dirName $pattern]
        if { [llength $subDirList] > 0 } {
            foreach subDirFile $subDirList {
                lappend fileList $subDirFile
            }
        }
    }
    return $fileList
}

proc load_tests { } {
    global TESTS TESTS_DIR LONGESTTESTNAME TESTTARGET ONETEST LARGE_TESTS LONG_TESTS MT_MAX
    set dirs "../tests/ ../third_party/tests/"
    set fileLists ""
    foreach dir $dirs {
	append fileList "[findFiles $dir *.sl] "
    }
    set testcommand ""
    set LONGESTTESTNAME 1
    set totaltest 0
    foreach file $fileList {
	regexp {([a-zA-Z0-9_/-]+)/([a-zA-Z0-9_-]+)\.sl} $file tmp testdir testname
	regsub [pwd]/ $testdir "" testdir
	incr totaltest
	if {($TESTTARGET != "") && ![regexp $TESTTARGET $testname]} {
	    continue
	}
	if {($ONETEST != "") && ($ONETEST != $testname)} {
	    continue
	}
	if {($ONETEST == "") && ($LARGE_TESTS == 0)} {
	    if [info exist LONG_TESTS($testname)] {
		continue
	    }
	}

	if {$LONGESTTESTNAME < [string length $testname]} {
	    set LONGESTTESTNAME [string length $testname]
	}

	set fid [open $testdir/$testname.sl]
	set testcommand [read $fid]
	close $fid

	set TESTS($testname) $testcommand
	set TESTS_DIR($testname) $testdir

    }
    log "Run with mt=$MT_MAX"
    log "THERE ARE $totaltest tests"
    log "RUNNING   [array size TESTS] tests"
    log ""
}


proc count_messages { result } {
    set fatals -1
    set errors -1
    set warnings -1
    set notes -1
    set syntax -1
    # Normal test
    regexp {FATAL\] : ([0-9]+)} $result tmp fatals
    regexp {SYNTAX\] : ([0-9]+)} $result tmp syntax
    regexp {ERROR\] : ([0-9]+)} $result tmp errors
    regexp {WARNING\] : ([0-9]+)} $result tmp warnings
    regexp {NOTE\] : ([0-9]+)} $result tmp notes   
    # Diff test
    if [regexp {\| FATAL \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp fatal1 fatal2] {
	set fatals [expr $fatal1 + $fatal2]
    }
    if [regexp {\|SYNTAX \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp syntax1 syntax2] {
	set syntax [expr $syntax1 + $syntax2]
    }
    if [regexp {\| ERROR \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp error1 error2] {
	set errors [expr $error1 + $error2]
    }
    if [regexp {\|WARNING\|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp warning1 warning2] {
	set warnings [expr $warning1 + $warning2]
    }
    if [regexp {\| NOTE  \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp note1 note2] {
	set notes [expr $note1 + $note2]
    }
    # Show help test
    if [regexp {outputlineinfo} $result] {
	set fatals 0
	set syntax 0
	set errors 0
	set warnings 0
	set notes 0
    }
    # stats per message ID

    set lines [split $result "\n"]
    foreach line $lines {
	if [regexp {(\[.*\])} $line tmp code] {
	    if [info exist CODES($code)] {
		incr CODES($code)
	    } else {
		set CODES($code) 1
	    }
	}
    }
    set details ""
    foreach name [lsort -dictionary [array names CODES]] {
	lappend details [list $name $CODES($name)]
    }

    return [list $fatals $errors $warnings $notes $details $syntax]
}

proc run_regression { } {
    global TESTS TESTS_DIR SURELOG_COMMAND LONGESTTESTNAME TESTTARGET ONETEST UPDATE USER ELAPSED PRIOR_USER PRIOR_ELAPSED
    global DIFF_TESTS PRIOR_MAX_MEM MAX_MEM MAX_TIME PRIOR_MAX_TIME SHOW_DETAILS MT_MAX KEEP_MT_ON REGRESSION_PATH LARGE_TESTS LONG_TESTS  DIFF_MODE
    set overrallpass "PASS"

    set w1 $LONGESTTESTNAME
    set w2 8
    set w4 8
    set w3 18
    set w5 12
    set MEM 0
    set sep +-[string repeat - $w1]-+-[string repeat - $w2]-+-[string repeat - $w2]-+-[string repeat - $w4]-+-[string repeat - $w2]-+-[string repeat - $w4]-+-[string repeat - $w2]-+-[string repeat - $w5]-+-[string repeat - $w5]-+
    log $sep
    log [format "| %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s |" $w1 "TESTNAME" $w2 "STATUS"  $w2 "FATAL"  $w2 "SYNTAX" $w4 "ERROR" $w2 "WARNING"  $w4 "NOTE"  $w5 "ELAPSED TIME" $w5 "MEM(Mb)"]
    log $sep

    foreach testname [array names TESTS] {
	set time_result ""
	set result ""
	if {($ONETEST != "") && ($testname != $ONETEST)} {
	    continue
	}

	if {($ONETEST == "") && ($LARGE_TESTS == 0)} {
	    if [info exist LONG_TESTS($testname)] {
		continue
	    }
	}

	set testdir $TESTS_DIR($testname)
	file mkdir $REGRESSION_PATH/tests/$testname
	set test $testname
	set command $TESTS($testname)
	regsub -all {\\} $command "" command
	regsub -all {\n} $command " " command
	if [regexp {third_party} $testdir] {
	    regsub -all {[\./]+UVM} $command "../../UVM" command
	} else {
	    regsub -all {[\./]+UVM} $command "../../third_party/UVM" command
	}
	if {($ONETEST != "")} {
	    log "\ncd $testdir"
	    if [regexp {\.sh} $command] {
		log "$command [lindex $SURELOG_COMMAND 1]\n"
	    } else {
		log "$SURELOG_COMMAND $command\n"
	    }
	}

	if {$UPDATE == 1} {
	    if [file exist "$REGRESSION_PATH/tests/$test/${testname}.log"] {
		log  [format "| %-*s | Copying $REGRESSION_PATH/tests/$test/${testname}.log to $testdir/${testname}.log" $w1 $testname]
		file copy -force "$REGRESSION_PATH/tests/$test/${testname}.log" "$testdir/${testname}.log"
		continue
	    } else {
		log  [format "| %-*s | No action" $w1 $testname]
		continue
	    }
	}

	log_nonewline [format "| %-*s |" $w1 $testname]

	cd $testdir
       	exec sh -c "cd $REGRESSION_PATH/tests/$test/; rm -rf slpp*"

	set passstatus "PASS"
	if {($ONETEST != "") && [regexp {ddd} $SURELOG_COMMAND]} {
	    log "\nrun $command\n"
	    catch {set time_result [exec sh -c "time $SURELOG_COMMAND > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result
	    exit
	}
	if {$DIFF_MODE == 0} {
	    set output_path "-o ../../build/tests/$test/"
	    if [regexp {third_party} $testdir] {
		set output_path "-o ../../../build/tests/$test/"
	    }
	    if [regexp {\.sh} $command] {
		catch {set time_result [exec sh -c "time $command [lindex $SURELOG_COMMAND 1] > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result
	    } else {
		if [regexp {\*/\*\.[sv]} $command] {
		    regsub -all {[\*/]+\*\.[sv]+} $command "" command
		    set command "$command [findFiles . *.v] [findFiles . *.sv]"
		    regsub -all [pwd]/ $command "" command
		}
		if ![info exist KEEP_MT_ON($testname)] {
		    regsub -all {\-mt[ ]+max} $command "" command
		    regsub -all {\-mt[ ]+[0-9]+} $command "" command
		    set command "$command -mt $MT_MAX $output_path"
		} else {
		    set command "$command -o $output_path"
		}

		catch {set time_result [exec sh -c "$SURELOG_COMMAND $command > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result
	    }
	}
	
	if [file exists "$REGRESSION_PATH/tests/$test/${testname}.log"] {
	    set fid [open "$REGRESSION_PATH/tests/$test/${testname}.log" "r"]
	    set result [read $fid]
	    close $fid
	} else {
	    if [file exists "${testname}.log"] {
		set fid [open "${testname}.log" "r"]
		set result [read $fid]
		close $fid
	    }
	}
	
	set segfault 0
	if {$DIFF_MODE == 0} {
	    if [regexp {Segmentation fault} $result] {
		set segfault 1
		exec sh -c "cd $REGRESSION_PATH/tests/$test/; rm -rf slpp*"
		if [regexp {\.sh} $command] {
		    catch {set time_result [exec sh -c "time $command [lindex $SURELOG_COMMAND 1] > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result
		} else {
		    catch {set time_result [exec sh -c "$SURELOG_COMMAND $command > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result
		}
		if [regexp {Segmentation fault} $result] {
		    set passstatus "FAIL"
		    set overrallpass "FAIL"
		    set segfault 2
		} else {
		    set segfault 0
		}
	    }
	}
	if [regexp {AdvancedDebug} $SURELOG_COMMAND] {
	    log $result
	}

	set fatals -1
	set syntax -1
	set errors -1
	set warnings -1
	set notes -1

	set log_fatals -1
	set log_syntax -1
	set log_errors -1
	set log_warnings -1
	set log_notes -1
	set user 0
	set elapsed_min 0
	set elapsed 0
	set cpu 0
	foreach {fatals errors warnings notes details syntax} [count_messages $result] {}
	if [regexp {([0-9\.:]+)user [0-9\.:]+system ([0-9]+):([0-9\.]+)elapsed ([0-9]+)%CPU} $time_result tmp user elapsed_min elapsed cpu] {
	    set user [expr int($user)]
	    set elapsed [expr int(($elapsed_min *60) + $elapsed)]
	    set USER    [expr $USER + $user]
	    set ELAPSED [expr $ELAPSED + $elapsed]
	    if {$MAX_TIME < $elapsed} {
		set MAX_TIME $elapsed
	    }
	}
	set mem 0
	if [regexp {([0-9]+)maxresident} $time_result tmp mem] {
	    set mem [expr $mem / 1024]
	    if {$MAX_MEM < $mem} {
		set MAX_MEM $mem
	    }
	}

	set SPEED ""
	set FASTER_OR_SLOWER 0
	set DIFF_MEM 0
	
	set time_content ""
	set no_previous_time_content 1
	if [file exists "$REGRESSION_PATH/tests/$test/${testname}.time"] {
	    set fid [open "$REGRESSION_PATH/tests/$test/${testname}.time" "r"]
	    set time_content [read $fid]
	    close $fid
	    set no_previous_time_content 0
	}
	if [file exists "$testname.log"] {
	    set fid [open "$testname.log" "r"]
	    set content [read $fid]	    
	    close $fid
	    foreach {log_fatals log_errors log_warnings log_notes log_details log_syntax} [count_messages $content] {}
	    set prior_user 0
	    set prior_elapsed_min 0
	    set prior_elapsed 0
	    set cpu 0
	    regexp {([0-9\.]+)user [0-9\.:]+system ([0-9]+):([0-9\.]+)elapsed ([0-9]+)%CPU} $time_content tmp prior_user prior_elapsed_min prior_elapsed cpu
	    set prior_user [expr int($prior_user)]
	    set prior_elapsed [expr int(($prior_elapsed_min *60) + $prior_elapsed)]
	    set PRIOR_USER    [expr $PRIOR_USER + $prior_user]
	    set PRIOR_ELAPSED [expr $PRIOR_ELAPSED +  $prior_elapsed]
	    if {$PRIOR_MAX_TIME < $prior_elapsed} {
		set PRIOR_MAX_TIME $prior_elapsed
	    }
	    if [expr $elapsed > $prior_elapsed] {
		set SPEED [format "%-*s %-*s " 4 "${elapsed}s" 5 "(+[expr $elapsed - $prior_elapsed]s)"]
		set FASTER_OR_SLOWER 1
	    } elseif [expr ($elapsed == $prior_elapsed) || ($no_previous_time_content)] {
		set SPEED [format "%-*s " 4 "${elapsed}s"]
	    } else {
		set SPEED [format "%-*s %-*s " 4 "${elapsed}s" 5 "(-[expr $prior_elapsed - $elapsed]s)"]
		set FASTER_OR_SLOWER 1
	    }
	
	    set prior_mem 0
	    regexp {([0-9]+)maxresident} $time_content tmp prior_mem 
	    set prior_mem [expr $prior_mem / 1024]
	    if {$PRIOR_MAX_MEM < $prior_mem} {
		set PRIOR_MAX_MEM $prior_mem
	    }
	    if [expr $mem > $prior_mem] {
		set MEM  [format "%-*s %-*s " 4 "${mem}" 5 "(+[expr $mem - $prior_mem])"]
		set DIFF_MEM 1
	    } elseif  [expr ($mem == $prior_mem) || ($no_previous_time_content)] {
		set MEM [format "%-*s " 4 "${mem}"]
	    } else {
		set MEM  [format "%-*s %-*s " 4 "${mem}" 5 "(-[expr $prior_mem - $mem])"]
		set DIFF_MEM 1
	    }

	    if {($fatals != $log_fatals) || ($errors != $log_errors) || ($warnings != $log_warnings) || ($notes != $log_notes) || ($syntax != $log_syntax)} {
		set overrallpass "DIFF"
		set passstatus "DIFF"
		set DIFF_TESTS($testname) $test
		if {$fatals != $log_fatals} {
		    set fatals "$fatals ([expr $fatals - $log_fatals])"
		}
		if {$errors != $log_errors} {
		    set errors "$errors ([expr $errors - $log_errors])"
		}
		if {$warnings != $log_warnings} {
		    set warnings "$warnings ([expr $warnings - $log_warnings])"
		}
		if {$notes != $log_notes} {
		    set notes "$notes ([expr $notes - $log_notes])"
		}
		if {$syntax != $log_syntax} {
		    set syntax "$syntax ([expr $syntax - $log_syntax])"
		}
	    }
	}
	if {($fatals == -1) || ($errors == -1) || ($warnings == -1) || ($notes == -1)} {
	    if {$segfault == 0} {
		set segfault 1
	    }
	    set fatals "SEGFAULT"
	    set passstatus "FAIL"
            set overrallpass "FAIL"
	}
	if {$segfault == 1 || $segfault == 2} {
	    set fatals "SEGFAULT"
	}

	log [format " %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s |" $w2 $passstatus $w2 $fatals $w2 $syntax $w4 $errors $w2 $warnings $w4 $notes $w5 $SPEED $w5 $MEM ]
	flush stdout
	if {$SHOW_DETAILS == 1} {
	    log "Log:\n"
	    foreach de $details {
		log $de
	    }
	    log "Diff Log:\n"
	    foreach de $log_details {
		log $de
	    }

	}


	set fid 0
	set fid_t 0
	if {$UPDATE == 1} {
	    set fid [open "$testname.log" "w"]
	} else {
	    set fid [open "$REGRESSION_PATH/tests/$test/${testname}.log" "w"]
	    set fid_t [open "$REGRESSION_PATH/tests/$test/${testname}.time" "w"]
	    puts $fid_t $time_result
	    close $fid_t
	}
	puts $fid $result
	close $fid

	cd $REGRESSION_PATH/tests
    }
    log $sep
    return $overrallpass
}


log "************************"
log "START SURELOG REGRESSION"
log ""
set systemTime [clock seconds]
set date "Starts on [clock format $systemTime -format %D] [clock format $systemTime -format %H:%M:%S]"
log "$date"
log "COMMAND: $SURELOG_COMMAND"

load_tests
set result [run_regression]

log "\n RESULT : $result\n"

if {$COMMIT_TEXT != ""} {
    if {($result == "PASS") && ($ONETEST == "") && ($TESTTARGET =="")} {
	log "git commit -m \"$COMMIT_TEXT\""
	exec sh -c "cd ~/surelog; git commit . -m \"$COMMIT_TEXT\""
	exec sh -c "git push"
    } else {
	log "CANNOT COMMIT CHANGES: $COMMIT_TEXT"
    }
    log ""
}

cd $REGRESSION_PATH

foreach testname [array names DIFF_TESTS] {
    set testdir $TESTS_DIR($testname)
    if {$SHOW_DIFF == 0} {
	log " tkdiff $testdir/${testname}.log tests/$DIFF_TESTS($testname)/${testname}.log"
    } else {
	log "============================== DIFF ======================================================"
	log "diff $testdir/${testname}.log tests/$DIFF_TESTS($testname)/${testname}.log"
	catch {exec sh -c "diff -d $testdir/${testname}.log tests/$DIFF_TESTS($testname)/${testname}.log"} dummy
	puts $dummy
    }
}
if [info exists DIFF_TESTS] {
    log ""
}

set w1 8
set sep +-[string repeat - 12]-+-[string repeat - $w1]-+-[string repeat - $w1]-+
log $sep
log  [format "|              | %-*s | %-*s |" $w1 "CURRENT"  $w1  "PREVIOUS" ]
log $sep
log  [format "|TOTAL ELAPSED | %-*s | %-*s |" $w1 "${ELAPSED}s"   $w1 "${PRIOR_ELAPSED}s" ]
log  [format "|TOTAL USER    | %-*s | %-*s |" $w1 "${USER}s"      $w1 "${PRIOR_USER}s"]
log  [format "|MAX MEM TEST  | %-*s | %-*s |" $w1 "${MAX_MEM}Mb"  $w1 "${PRIOR_MAX_MEM}Mb"]
log  [format "|MAX TIME TEST | %-*s | %-*s |" $w1 "${MAX_TIME}s"  $w1 "${PRIOR_MAX_TIME}s"]
log $sep
log ""
set systemTime [clock seconds]
set date "End on [clock format $systemTime -format %D] [clock format $systemTime -format %H:%M:%S]"
log "$date"
log  "END SURELOG REGRESSION"
log "************************"

if {$result == "PASS"} {
    exit 0
} else {
    exit 1
}
