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

  1. I wrote a balanced Brackets proc: http://wiki.tcl.tk/55416
  2.  
  3. But it does not hurt to test the functionality. So I started with tcltest. Below the way I implemented it. Any comments?
  4.  
  5. package require tcltest
  6. namespace import ::tcltest::*
  7.  
  8. set brackets [dict create \{ } \[ \] ( )]
  9. set brackets2 [dict create \{ } \[ \] ( ) < >]
  10. 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]
  11. set correctStrings {}
  12. lappend correctStrings [list "()" \
  13. ${brackets}]
  14. lappend correctStrings [list "\[]" \
  15. ${brackets}]
  16. lappend correctStrings [list "{}" \
  17. ${brackets}]
  18. lappend correctStrings [list "{()}" \
  19. ${brackets}]
  20. lappend correctStrings [list "{\[()]}" \
  21. ${brackets}]
  22. lappend correctStrings [list "{{\[\[(())]]}}" \
  23. ${brackets}]
  24. lappend correctStrings [list "{{\[()\[{}]]}}" \
  25. ${brackets}]
  26. lappend correctStrings [list "{{\[()\[{<>}]]}}" \
  27. ${brackets2}]
  28. lappend correctStrings [list "{}{()}{\[]}{\[()]}((){\[\[]]}\[\[]]{\[\[{{{}}{}}]](\[])\[]{{}}(\[]\[\[()]])}\[\[\[]\[]\[](){()(()\[\[]{\[\[]]()}])}()]])()\[]" \
  29. ${brackets}]
  30. lappend correctStrings [list "{(\[])\[]}()\[]<()>\[<()<>()(\[](\[]))>(){<><{<><()>\[]{}}>{}{}<{}{\[\[()]{}]<\[]>{(<{}>{})(\[](()<>))}\[{}]}({}<>\[{<\[{\[]<>}]>}({()<()>({{}})()}{{\[{}{<\[<>]>}<{\[{}\[]]\[{{}}]}{}\[()]<{(\[])}({}(){}){}<>{}{\[]}()(<<>()((\[]{}(){<{(){(<\[]>())}{<(()\[\[{}]<()\[\[()()\[]]<{}>]>])>(){{}}{(<>){}(\[(())]\[{\[(()<\[<{{}<(\[\[]](){}<<>>{\[()]}<>)>}>]>{})]}<(\[]\[{<\[]>}<<(\[()\[]])>\[]>])>]<{\[]}><>)}\[]<<>\[]{}>}{{}}()()}><>{\[<<\[]\[]{\[()<>]}{<><{}>\[]{(())()\[({}<<\[]><{}>\[]{<()()({}\[](())(()<>)<<<>{}>()>){{<(\[((({}))(\[])\[<<\[]{\[]()(()<>)<><{}>(\[(){<()>}])<>}>>{}\[()]])])\[]{{{}<()\[]<\[{\[({{()}\[]<>})]}()<{}><{}>{\[]<{}>()}\[<{<\[]\[]>((<\[]\[(<<>>\[])]>)(<<>>(\[]))\[]{})\[]}>()<\[]>]](){}>>{}}<>}({(<{}>())})\[\[]((){})]>}}>{\[]}}>)]}{}}\[]>>]{}}}))<>>)>()>]}})])>}]<>" \
  31. ${brackets2}]
  32. lappend correctStrings [list WWIiwINnCcPRrpKAakMHhmYyiIAJYyjaAKAaCTtcOKkHJjhRrokHhaiVWPpwvYHhRXFGgfKOQqokxVRSBbUPpuKOoksrFfXAVNIiXxQqRrCcnALlaFKTtkfSOoNRWTHhMLlmtAYKTtkCLXxlcyaOoFfKBOobVvkFZSszfwrnLRCUuUucMOLPpOoFfloLlGWFCMYymLKVvklVvKkcfRHhrwMUMmCcuNGgOoXxKknmNnBbMDBSsZVVvvBbQqRrAazGgLZQRrRBbrqOZzHhAaWQYyqNKknVvwoAVIiAavSOoSsBbSsUuZMJHhJRrjjMmWwmzDesazlbeBbSSsULlCcusNnmQCcTLlZPLDDeelQqIiUAWQJjZzVPKUuQSTNnAKkaLFfOBKkboYyltsqAakIipvHhqwJYLOBboBLHhlbFfJjlUVKQGgSOUGgWDKJjDeHZzhkewLNHMmhnluFfIXxYyCcAaiosqGgkAaMPpLlmOovCPpZGQqMmgOoQPpLTHhTZzCUFfuNnctMZFfzHhmtNnFXTSJTMCcTtmtTTMPIiHRQWwqIiBLCclbrhpKVYyvBDebMXBHMmhbxPpFMmfMRZBKkMVADTXxtTPpSsteavSsOoWwJjDNPpneLQKkqlmVMmvbzrVDXxGAXxMDeAaPpVvmagOoeSsvmmTKUUuWCUAaBbuXMJjmxcwKkKIiZDeCcRrzkukFXDeGQPpJIIFfODTFXDGgOoBFPpLMmlfbexMmfFfteoMmTNKRrODeNnHhTWwtoRrknLlOYyZzotiTtijHUCcuhWRSsKULDBHVvYPXCcNnxpyBCcbhQqbVWXxPCDecpKkwveYMmyCATtacVvTNntVvOolukWIFILlPpVWJjwIivVRFfrXHVBLRZZzSszrlbvIihFfHhDeQqxSMGVGgUDeuvgMTtNABAKOSVVLlvQXxqvSssoNKkTKTBNnTPpNLlSKkOBGCOJZWJAajXxwzHNnhVvjoOFfYyBOCTtRODeGgCcGgCBbSsIFfQTtPpXxqUuicoUurcobVKSWwsIZRHhrPpziAaUOoTVvtXxukvoXRQWwDCLGgNUPQWOowQqqpuFFOYLlUuQXUuxFfqyoffXxnQLRrlIiqSOoslcQMmqHhBbQqeWwBbqrxcLlUZPpAZzazugBVKNnMmYZHPphzIPZBYFVvfDWFfwRFJZzTFVUITtiuvftFfjfRFfrreWSswBAUuYBKRrkGgbDeJjyHhabyFWWRWwIiKkrwwfbIIiizpiWwXYADeKOoNGWwgWSZDCKHhDekcZJYWwYyyGgCcUYXGLlgxZKkPpWDewzFfyWwujPIiPppzXxLAAZPIipzaaWwlMFIifRrmHMQVCcUuvONnoZzHhCcSMmsqNJMmTQqtASsaMmFfjUAPCWGgQqwRBbrcAYyHLUWDewJMHhmjCICcicuJTHSshMmWwZOIioztjLLWwllFfBQqMmXxbIHNnhiTtlhHhPWQqVvwpaSPOopRYXxyVIivMMmDemVvrNnYyXxUuspaLlunmNnhezswnkaNnBbyXRBbrxFFfPpFIiffxykSZzHDDeeHhhLJBbPpSHXKOPXxpLlokxhsFfPpjRrTZztlsvbbPUOoUuupDLFfUuleosnHhNnGUUTZztuOougtbPptktnkabWwTtanmmsZQqzvifiwrwqgIixfZztkmttjZzJjstxfBCcMmblqzcuIiVvyjNPXxpnaupztNnJWwjqgmrlsvaxvryw \
  33. ${brackets3}]
  34.  
  35. # Possible errors:
  36. # 0 - n-1 index where a wrong closing bracket is found
  37. # -2 string is uneven
  38. # -3 when not balanced after string is consumed
  39. # ILLEGAL:c:x illegal character and index where it is found
  40. set wrongStrings {}
  41. lappend wrongStrings [list "{\[(])" \
  42. ${brackets} -2]
  43. lappend wrongStrings [list "{\[(])}" \
  44. ${brackets} 3]
  45. lappend wrongStrings [list "<>" \
  46. ${brackets} ILLEGAL:<:0]
  47. lappend wrongStrings [list "{{" \
  48. ${brackets} -3]
  49. lappend wrongStrings [list "{{\[()\[{<>}]]}}" \
  50. ${brackets} ILLEGAL:<:7]
  51. lappend wrongStrings [list "{{\[()\[{<}>]]}}" \
  52. ${brackets2} 8]
  53. lappend wrongStrings [list AZzFfUuNnUuaFUBGgAOoabuHRLlOPporMmhURYyZzrXxuSYMQqLlDemKkyGQqgBFfBVvRrPpRrMWwFfZMmzOOooZYyUYSsHhTNntKkyKXxJjkNnuzmTtbXHWNJNAMXJjxmXOAMmXOoRrxaoXAaxxODeoBGgKLZzlSsPFKkfpMmWGISsUQFfAYyaquWwAXPpxaigGWLUKkuBblwRrgNLZzlnDeFfIiYyMLQDeQJOojqXWwxUuQqUIGgFfCcGMKXxUukUIMmiuXxDeMmmGggiKPpIGTVvtPDeJLljABbapWwgiCUIRrTBbtiuckFfuNCIicLlNnPALOoXHhPPUupFfpxlOZLlzFHhHhfoJQVvAaGAVvagQqqjYyXLHhlxRraAAaapMHXYyTtCcPZFGDLlMmeANJjnFZYBbUSBbBKkbsuKLlkVNnRrCcLQRrGgVvqGLlglvyJjTWPpwtJjKkGgQPOHhTtJjCUOoNnuLDelcVKKkWZzwGVHhvgQqkvZzQqopCcJjYPpAayUuIQHhWXxIXKBVvPUuUSYysuCKAHhJjUuaPpkcpbkGgPpIixiBNFfnOoLUHRrRrhRruUAVATSIisFJjftaUuvaulKIikZXCcZJRRWwrrRrQqHhjCTtcOTJRrjJjDetoZzBbZXxWODeBITHhtFPXxpfWwiFJAZZMQqYMMmTtMmPpXNnLWYyUuwPplxmymzZHYyDLlAKSskaeOohSsRTtrTtHSNAansIDXxeNJTCctUuHSsRrhBKYBTYIIMVNnTtXxvmiNnJjHhMmiyXxtZzTAaPQCcZzqpNIDNnNFCcfSQRrqOMWYywmTtosWUuGOFIBbMmLlifWwogwAaneiLNnlAZzBTtKkAabantbykbDeDCTUutGgIIVvBbSIisiLMmDTtPBTtZDXxLYGgyMmlCcSsezbBQqACKCXxckWMmwcaLXxDCcFMmWNLYFfylOonwIFfWwWPRrJjpQXxLlqXxCcwRriFMmffNCIPXxWwIipIiiNGMDemWLlUuGHKkhgwFXxUuHhRIUNOonuirQOoMmqBGMmDLlegbfMXIiZGgTtHPZzpBZTRVYyvVBbSsvrLlKkVFfvtzYOoCcWwKGgPpTVvtkybhZzHhGSGMmLCcKklgsgRrzNnIXxiPpWwxmgncOonelHMHHLLFQqfCBLVMJIDHQqDeAaDUJjMmHBbhueAUGguIXNZNnzMIHOohDOKFfkoeimXxTZzQYNVYyvBUAaubVvnyLlUuqJjAPBbJYyjpQqQUuCBbIZziIWQqUIiuOHFPZzFfpfXGgxDeNZBbzSMUPpIiIiuXxGgmsCHhUITTttBbiYPpFfSsGgyZPpCczuPpYycnhowiNXxUuncFfQKkIPpiSUPpVCGgcYyvuMYymsqqVODeovaQqSZCcTtWTtwBKkSLNnAaCclFfsHhQVIiAaMFfmJjSsvVCFfcvqZCFfYFJjYyXxMWORZPUuSsLPpMUuYKFfkymNLYylnZzIiJjlCcpzroFZSszfMmCcwmGgNSMmsnfySTIiIitQqZNIJjJjORroinJjBbzsIJZDezjYAaYTGFNBUuGgTtKNnVIOXUuRAaCXMmGZLlzgCcxcrxCcoFfiMNnmWXxHGgJSsjXxhDewGgBbJjvIZziFfONOoRPJjprnSUuIiKkTIiGXWwBbxgDHSshQLKklKNGFWwfAaHhHhKkBbgIiDLHhDSQARraLlqsGLHhlOAaogLleNnlenHVIivhTtkqeBbtUusWwokRYOoYyJOojPRrUMKQqXxMPpmVvZZGgHhYyzIizUuCLlcULlXxGguHQqhkPQIAaNnDUueiRCcrqOLHhHUuhPSspJKkKkjGAWRrWZCczFfwSsNnPpwXxVvIQqiaJXxHLKLUQTtNOonqulCckFflhjgQKWYRDeQqSNAaYNUZRVDYyPpDHFfheeKkLRrlMPAaOONnPpoPNFfPQqFFffGgpHhnIXGgxZizPAaLCclpOUIiCRrcuTXMmxMHJjhAXxaCFRRrMmUurRWwYyrYyLAaAaMDBRSBIWVvwibIUKDCKWGgSJRrYySJMmPGgpjsVvjsAZGgzHhZGVXxvJjgzawHZLlzhHhkcekTBbtWwuiKksrbNIinKkMKSUUuuskBbmLlZKBYybkzIGgiemZzIiIPAXUQSLlsJjquJGgjxapiMmOoXxPpQqSsBblfcmtZzGYSsygoSVvDeZWwAazspBUNLGMYymWFOofwPpNnSsglnHXxhubYyoBbpmvANnarzNGWPpFfwKkgnuWwnynsrXxTtywkqlopCcmOoBbHhKkBbuTDOYyPpKWwkoPpetpyrbNSsTtNnnnfKkgtQqyyiczbzLWVXxvJjwlstnKkxZziaheijTtmvlbcllhhmhCcXxbpeAFIifSJjSsHCDeQqcNCcnhsalNnJjicejnihzzajfBbLlboWwwzzxzbwqiqzXxfagIBbifzpNnxhmnqlmwkKkbZzanjnwhxbsf \
  54. ${brackets3} 1983]
  55. lappend wrongStrings [list ZIizMmSTYytNnIiAHhaFfVCcvsWwLlNOLloMVOZzoYRrYHhyyQYyLlPpRJjrUuqCZMmzQRMIiCcFJjCcfmrZzMmQYyqYyqXxKkJjXxXWwxLQDHhDGgRrZzQBYybqOHhoIRTYUuyTXIixttLKkQqFflOoXxYSsyrMXxmiTtGVvgWKWHWISCAZzXxSNYDeynsRPprQqacsJjiVTtvWwYOKRrkoIiywFYyfhwYUXKOoRrkHGDVIVMmvPpGBbQXFfIBbTtiZVOovzIYCcyixGgKSUuskWAaUuwqPpgWwivegMYLGAXxXJjCcxaJPpNnBISsiAaFfVvBSsKkbBbbjgTVWwONGQXYIHhiyBbxNFfnHhMKkGgmRJjrVXxWwvLUulHQUDIieSVAaHSsSshvYPpysNWwBZzWUuBGgSAasGgbKOPpWPpwDYyVDeGgveILKkKkDCOWwUuGgoFSsZzfceLlXSsxQqYylioWJQqHhjNnwPpkWZIizwIJjXHhxiwPLCWwcGgVvCADKWWBbwwkOoeaTYyPBPFJjIiFffBbSNnBXxPpYybGgPYyWXxBbwpPpspRCBbcrKkbRrXxpLltZzcYBFLJjBbMJAaBCcbjBOobmJKBbVYBbXWwxMmyJLDeWwljvkjBblHhPJZBbzjPpTKktDeKDeMYIiSsymBSMmsKkAQJjTtqaMGDBHQqCOochAaQJjqOFVYRNAanrVBRrWwbvCXxcyCcQqvfUuobeGggmbkDeTtpJjfbylZMGIigRBbrAINnASsLSsWwlDTKQLlqkteaMTWwWwFftFNPHIiJGNnOoAIJACNnYycaIiSDesjiagYAMJjYyTCRrcPNnBbUuXxpYOXxFFffGgoABbBbFXxIifPpDeaFRFfYKkyNnrfQqZzyBbtLlmayKkFDTtefRHhrQqjhpnfmOoXDAaFfeBbFfxIIiIiiiam.pbGgDenuqhqVvgnoVvvtlymMmhxuykwSseeXxqGglcvmnQRrq \
  56. ${brackets3} ILLEGAL:.:950]
  57.  
  58. # Correct strings
  59. for {set i 0} {$i < [llength ${correctStrings}]} {incr i} {
  60. lassign [lindex ${correctStrings} $i] currentStr currentBrackets
  61. test correct_${i} {} -body { balancedBrackets ${currentStr} ${currentBrackets} } -result -1
  62. test correctBool_${i} {} -body { balancedBracketsBool ${currentStr} ${currentBrackets} } -result 1
  63. }
  64. # Wrong strings
  65. for {set i 0} {$i < [llength ${wrongStrings}]} {incr i} {
  66. lassign [lindex ${wrongStrings} $i] currentStr currentBrackets currentError
  67. test wrong_${i} {} -body { balancedBrackets ${currentStr} ${currentBrackets} } -result ${currentError}
  68. test wrongBool_${i} {} -body { balancedBracketsBool ${currentStr} ${currentBrackets} } -result 0
  69. }
  70.  
  71. cleanupTests
  72.