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