Posted to tcl by CecilWesterhof at Wed Aug 01 11:39:07 GMT 2018view raw
- 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