Posted to tcl by CecilWesterhof at Wed Aug 01 11:39:07 GMT 2018view pretty

I wrote a balanced Brackets proc: http://wiki.tcl.tk/55416

But it does not hurt to test the functionality.  So I started with tcltest. Below the way I implemented it. Any comments?

package   require tcltest
namespace import  ::tcltest::*

set     brackets       [dict create \{ } \[ \] ( )]
set     brackets2      [dict create \{ } \[ \] ( ) < >]
set     brackets3      [dict create A a B b C c D e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Y y Z z]
set     correctStrings {}
lappend correctStrings [list "()" \
                            ${brackets}]
lappend correctStrings [list "\[]" \
                            ${brackets}]
lappend correctStrings [list "{}" \
                            ${brackets}]
lappend correctStrings [list "{()}" \
                            ${brackets}]
lappend correctStrings [list "{\[()]}" \
                            ${brackets}]
lappend correctStrings [list "{{\[\[(())]]}}" \
                            ${brackets}]
lappend correctStrings [list "{{\[()\[{}]]}}" \
                            ${brackets}]
lappend correctStrings [list "{{\[()\[{<>}]]}}" \
                            ${brackets2}]
lappend correctStrings [list "{}{()}{\[]}{\[()]}((){\[\[]]}\[\[]]{\[\[{{{}}{}}]](\[])\[]{{}}(\[]\[\[()]])}\[\[\[]\[]\[](){()(()\[\[]{\[\[]]()}])}()]])()\[]" \
                            ${brackets}]
lappend correctStrings [list "{(\[])\[]}()\[]<()>\[<()<>()(\[](\[]))>(){<><{<><()>\[]{}}>{}{}<{}{\[\[()]{}]<\[]>{(<{}>{})(\[](()<>))}\[{}]}({}<>\[{<\[{\[]<>}]>}({()<()>({{}})()}{{\[{}{<\[<>]>}<{\[{}\[]]\[{{}}]}{}\[()]<{(\[])}({}(){}){}<>{}{\[]}()(<<>()((\[]{}(){<{(){(<\[]>())}{<(()\[\[{}]<()\[\[()()\[]]<{}>]>])>(){{}}{(<>){}(\[(())]\[{\[(()<\[<{{}<(\[\[]](){}<<>>{\[()]}<>)>}>]>{})]}<(\[]\[{<\[]>}<<(\[()\[]])>\[]>])>]<{\[]}><>)}\[]<<>\[]{}>}{{}}()()}><>{\[<<\[]\[]{\[()<>]}{<><{}>\[]{(())()\[({}<<\[]><{}>\[]{<()()({}\[](())(()<>)<<<>{}>()>){{<(\[((({}))(\[])\[<<\[]{\[]()(()<>)<><{}>(\[(){<()>}])<>}>>{}\[()]])])\[]{{{}<()\[]<\[{\[({{()}\[]<>})]}()<{}><{}>{\[]<{}>()}\[<{<\[]\[]>((<\[]\[(<<>>\[])]>)(<<>>(\[]))\[]{})\[]}>()<\[]>]](){}>>{}}<>}({(<{}>())})\[\[]((){})]>}}>{\[]}}>)]}{}}\[]>>]{}}}))<>>)>()>]}})])>}]<>" \
                            ${brackets2}]
lappend correctStrings [list WWIiwINnCcPRrpKAakMHhmYyiIAJYyjaAKAaCTtcOKkHJjhRrokHhaiVWPpwvYHhRXFGgfKOQqokxVRSBbUPpuKOoksrFfXAVNIiXxQqRrCcnALlaFKTtkfSOoNRWTHhMLlmtAYKTtkCLXxlcyaOoFfKBOobVvkFZSszfwrnLRCUuUucMOLPpOoFfloLlGWFCMYymLKVvklVvKkcfRHhrwMUMmCcuNGgOoXxKknmNnBbMDBSsZVVvvBbQqRrAazGgLZQRrRBbrqOZzHhAaWQYyqNKknVvwoAVIiAavSOoSsBbSsUuZMJHhJRrjjMmWwmzDesazlbeBbSSsULlCcusNnmQCcTLlZPLDDeelQqIiUAWQJjZzVPKUuQSTNnAKkaLFfOBKkboYyltsqAakIipvHhqwJYLOBboBLHhlbFfJjlUVKQGgSOUGgWDKJjDeHZzhkewLNHMmhnluFfIXxYyCcAaiosqGgkAaMPpLlmOovCPpZGQqMmgOoQPpLTHhTZzCUFfuNnctMZFfzHhmtNnFXTSJTMCcTtmtTTMPIiHRQWwqIiBLCclbrhpKVYyvBDebMXBHMmhbxPpFMmfMRZBKkMVADTXxtTPpSsteavSsOoWwJjDNPpneLQKkqlmVMmvbzrVDXxGAXxMDeAaPpVvmagOoeSsvmmTKUUuWCUAaBbuXMJjmxcwKkKIiZDeCcRrzkukFXDeGQPpJIIFfODTFXDGgOoBFPpLMmlfbexMmfFfteoMmTNKRrODeNnHhTWwtoRrknLlOYyZzotiTtijHUCcuhWRSsKULDBHVvYPXCcNnxpyBCcbhQqbVWXxPCDecpKkwveYMmyCATtacVvTNntVvOolukWIFILlPpVWJjwIivVRFfrXHVBLRZZzSszrlbvIihFfHhDeQqxSMGVGgUDeuvgMTtNABAKOSVVLlvQXxqvSssoNKkTKTBNnTPpNLlSKkOBGCOJZWJAajXxwzHNnhVvjoOFfYyBOCTtRODeGgCcGgCBbSsIFfQTtPpXxqUuicoUurcobVKSWwsIZRHhrPpziAaUOoTVvtXxukvoXRQWwDCLGgNUPQWOowQqqpuFFOYLlUuQXUuxFfqyoffXxnQLRrlIiqSOoslcQMmqHhBbQqeWwBbqrxcLlUZPpAZzazugBVKNnMmYZHPphzIPZBYFVvfDWFfwRFJZzTFVUITtiuvftFfjfRFfrreWSswBAUuYBKRrkGgbDeJjyHhabyFWWRWwIiKkrwwfbIIiizpiWwXYADeKOoNGWwgWSZDCKHhDekcZJYWwYyyGgCcUYXGLlgxZKkPpWDewzFfyWwujPIiPppzXxLAAZPIipzaaWwlMFIifRrmHMQVCcUuvONnoZzHhCcSMmsqNJMmTQqtASsaMmFfjUAPCWGgQqwRBbrcAYyHLUWDewJMHhmjCICcicuJTHSshMmWwZOIioztjLLWwllFfBQqMmXxbIHNnhiTtlhHhPWQqVvwpaSPOopRYXxyVIivMMmDemVvrNnYyXxUuspaLlunmNnhezswnkaNnBbyXRBbrxFFfPpFIiffxykSZzHDDeeHhhLJBbPpSHXKOPXxpLlokxhsFfPpjRrTZztlsvbbPUOoUuupDLFfUuleosnHhNnGUUTZztuOougtbPptktnkabWwTtanmmsZQqzvifiwrwqgIixfZztkmttjZzJjstxfBCcMmblqzcuIiVvyjNPXxpnaupztNnJWwjqgmrlsvaxvryw \
                            ${brackets3}]

# Possible errors:
# 0 - n-1 index where a wrong closing bracket is found
# -2 string is uneven
# -3 when not balanced after string is consumed
# ILLEGAL:c:x illegal character and index where it is found
set     wrongStrings   {}
lappend wrongStrings   [list "{\[(])" \
                            ${brackets} -2]
lappend wrongStrings   [list "{\[(])}" \
                            ${brackets} 3]
lappend wrongStrings   [list "<>" \
                            ${brackets} ILLEGAL:<:0]
lappend wrongStrings   [list "{{" \
                            ${brackets} -3]
lappend wrongStrings   [list "{{\[()\[{<>}]]}}" \
                            ${brackets} ILLEGAL:<:7]
lappend wrongStrings   [list "{{\[()\[{<}>]]}}" \
                            ${brackets2} 8]
lappend wrongStrings   [list AZzFfUuNnUuaFUBGgAOoabuHRLlOPporMmhURYyZzrXxuSYMQqLlDemKkyGQqgBFfBVvRrPpRrMWwFfZMmzOOooZYyUYSsHhTNntKkyKXxJjkNnuzmTtbXHWNJNAMXJjxmXOAMmXOoRrxaoXAaxxODeoBGgKLZzlSsPFKkfpMmWGISsUQFfAYyaquWwAXPpxaigGWLUKkuBblwRrgNLZzlnDeFfIiYyMLQDeQJOojqXWwxUuQqUIGgFfCcGMKXxUukUIMmiuXxDeMmmGggiKPpIGTVvtPDeJLljABbapWwgiCUIRrTBbtiuckFfuNCIicLlNnPALOoXHhPPUupFfpxlOZLlzFHhHhfoJQVvAaGAVvagQqqjYyXLHhlxRraAAaapMHXYyTtCcPZFGDLlMmeANJjnFZYBbUSBbBKkbsuKLlkVNnRrCcLQRrGgVvqGLlglvyJjTWPpwtJjKkGgQPOHhTtJjCUOoNnuLDelcVKKkWZzwGVHhvgQqkvZzQqopCcJjYPpAayUuIQHhWXxIXKBVvPUuUSYysuCKAHhJjUuaPpkcpbkGgPpIixiBNFfnOoLUHRrRrhRruUAVATSIisFJjftaUuvaulKIikZXCcZJRRWwrrRrQqHhjCTtcOTJRrjJjDetoZzBbZXxWODeBITHhtFPXxpfWwiFJAZZMQqYMMmTtMmPpXNnLWYyUuwPplxmymzZHYyDLlAKSskaeOohSsRTtrTtHSNAansIDXxeNJTCctUuHSsRrhBKYBTYIIMVNnTtXxvmiNnJjHhMmiyXxtZzTAaPQCcZzqpNIDNnNFCcfSQRrqOMWYywmTtosWUuGOFIBbMmLlifWwogwAaneiLNnlAZzBTtKkAabantbykbDeDCTUutGgIIVvBbSIisiLMmDTtPBTtZDXxLYGgyMmlCcSsezbBQqACKCXxckWMmwcaLXxDCcFMmWNLYFfylOonwIFfWwWPRrJjpQXxLlqXxCcwRriFMmffNCIPXxWwIipIiiNGMDemWLlUuGHKkhgwFXxUuHhRIUNOonuirQOoMmqBGMmDLlegbfMXIiZGgTtHPZzpBZTRVYyvVBbSsvrLlKkVFfvtzYOoCcWwKGgPpTVvtkybhZzHhGSGMmLCcKklgsgRrzNnIXxiPpWwxmgncOonelHMHHLLFQqfCBLVMJIDHQqDeAaDUJjMmHBbhueAUGguIXNZNnzMIHOohDOKFfkoeimXxTZzQYNVYyvBUAaubVvnyLlUuqJjAPBbJYyjpQqQUuCBbIZziIWQqUIiuOHFPZzFfpfXGgxDeNZBbzSMUPpIiIiuXxGgmsCHhUITTttBbiYPpFfSsGgyZPpCczuPpYycnhowiNXxUuncFfQKkIPpiSUPpVCGgcYyvuMYymsqqVODeovaQqSZCcTtWTtwBKkSLNnAaCclFfsHhQVIiAaMFfmJjSsvVCFfcvqZCFfYFJjYyXxMWORZPUuSsLPpMUuYKFfkymNLYylnZzIiJjlCcpzroFZSszfMmCcwmGgNSMmsnfySTIiIitQqZNIJjJjORroinJjBbzsIJZDezjYAaYTGFNBUuGgTtKNnVIOXUuRAaCXMmGZLlzgCcxcrxCcoFfiMNnmWXxHGgJSsjXxhDewGgBbJjvIZziFfONOoRPJjprnSUuIiKkTIiGXWwBbxgDHSshQLKklKNGFWwfAaHhHhKkBbgIiDLHhDSQARraLlqsGLHhlOAaogLleNnlenHVIivhTtkqeBbtUusWwokRYOoYyJOojPRrUMKQqXxMPpmVvZZGgHhYyzIizUuCLlcULlXxGguHQqhkPQIAaNnDUueiRCcrqOLHhHUuhPSspJKkKkjGAWRrWZCczFfwSsNnPpwXxVvIQqiaJXxHLKLUQTtNOonqulCckFflhjgQKWYRDeQqSNAaYNUZRVDYyPpDHFfheeKkLRrlMPAaOONnPpoPNFfPQqFFffGgpHhnIXGgxZizPAaLCclpOUIiCRrcuTXMmxMHJjhAXxaCFRRrMmUurRWwYyrYyLAaAaMDBRSBIWVvwibIUKDCKWGgSJRrYySJMmPGgpjsVvjsAZGgzHhZGVXxvJjgzawHZLlzhHhkcekTBbtWwuiKksrbNIinKkMKSUUuuskBbmLlZKBYybkzIGgiemZzIiIPAXUQSLlsJjquJGgjxapiMmOoXxPpQqSsBblfcmtZzGYSsygoSVvDeZWwAazspBUNLGMYymWFOofwPpNnSsglnHXxhubYyoBbpmvANnarzNGWPpFfwKkgnuWwnynsrXxTtywkqlopCcmOoBbHhKkBbuTDOYyPpKWwkoPpetpyrbNSsTtNnnnfKkgtQqyyiczbzLWVXxvJjwlstnKkxZziaheijTtmvlbcllhhmhCcXxbpeAFIifSJjSsHCDeQqcNCcnhsalNnJjicejnihzzajfBbLlboWwwzzxzbwqiqzXxfagIBbifzpNnxhmnqlmwkKkbZzanjnwhxbsf \
                            ${brackets3} 1983]
lappend wrongStrings    [list ZIizMmSTYytNnIiAHhaFfVCcvsWwLlNOLloMVOZzoYRrYHhyyQYyLlPpRJjrUuqCZMmzQRMIiCcFJjCcfmrZzMmQYyqYyqXxKkJjXxXWwxLQDHhDGgRrZzQBYybqOHhoIRTYUuyTXIixttLKkQqFflOoXxYSsyrMXxmiTtGVvgWKWHWISCAZzXxSNYDeynsRPprQqacsJjiVTtvWwYOKRrkoIiywFYyfhwYUXKOoRrkHGDVIVMmvPpGBbQXFfIBbTtiZVOovzIYCcyixGgKSUuskWAaUuwqPpgWwivegMYLGAXxXJjCcxaJPpNnBISsiAaFfVvBSsKkbBbbjgTVWwONGQXYIHhiyBbxNFfnHhMKkGgmRJjrVXxWwvLUulHQUDIieSVAaHSsSshvYPpysNWwBZzWUuBGgSAasGgbKOPpWPpwDYyVDeGgveILKkKkDCOWwUuGgoFSsZzfceLlXSsxQqYylioWJQqHhjNnwPpkWZIizwIJjXHhxiwPLCWwcGgVvCADKWWBbwwkOoeaTYyPBPFJjIiFffBbSNnBXxPpYybGgPYyWXxBbwpPpspRCBbcrKkbRrXxpLltZzcYBFLJjBbMJAaBCcbjBOobmJKBbVYBbXWwxMmyJLDeWwljvkjBblHhPJZBbzjPpTKktDeKDeMYIiSsymBSMmsKkAQJjTtqaMGDBHQqCOochAaQJjqOFVYRNAanrVBRrWwbvCXxcyCcQqvfUuobeGggmbkDeTtpJjfbylZMGIigRBbrAINnASsLSsWwlDTKQLlqkteaMTWwWwFftFNPHIiJGNnOoAIJACNnYycaIiSDesjiagYAMJjYyTCRrcPNnBbUuXxpYOXxFFffGgoABbBbFXxIifPpDeaFRFfYKkyNnrfQqZzyBbtLlmayKkFDTtefRHhrQqjhpnfmOoXDAaFfeBbFfxIIiIiiiam.pbGgDenuqhqVvgnoVvvtlymMmhxuykwSseeXxqGglcvmnQRrq \
                             ${brackets3} ILLEGAL:.:950]

# Correct strings
for {set i 0} {$i < [llength ${correctStrings}]} {incr i} {
    lassign [lindex ${correctStrings} $i] currentStr currentBrackets
    test correct_${i}     {} -body { balancedBrackets     ${currentStr} ${currentBrackets} } -result -1
    test correctBool_${i} {} -body { balancedBracketsBool ${currentStr} ${currentBrackets} } -result  1
}
# Wrong strings
for {set i 0} {$i < [llength ${wrongStrings}]} {incr i} {
    lassign [lindex ${wrongStrings} $i] currentStr currentBrackets currentError
    test wrong_${i}     {} -body { balancedBrackets     ${currentStr} ${currentBrackets} } -result ${currentError}
    test wrongBool_${i} {} -body { balancedBracketsBool ${currentStr} ${currentBrackets} } -result 0
}

cleanupTests