(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Test string list functionality">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: test_split
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[34])]
                )
                (C {(test_expect_success)} 
                  {
                    (DQ ("split ") ($ VSub_Number "$1") (" at ") ($ VSub_Number "$2") (", max ") 
                      ($ VSub_Number "$3")
                    )
                  } 
                  {
                    (DQ ("\n") ("\t\ttest-string-list split '") ($ VSub_Number "$1") ("' '") 
                      ($ VSub_Number "$2") ("' '") ($ VSub_Number "$3") ("' >actual &&\n") ("\t\ttest_cmp expected actual &&\n") 
                      ("\t\ttest-string-list split_in_place '") ($ VSub_Number "$1") ("' '") ($ VSub_Number "$2") ("' '") ($ VSub_Number "$3") ("' >actual &&\n") 
                      ("\t\ttest_cmp expected actual\n") ("\t")
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [29]
        )
      spids: [24 28]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ ("foo:bar:baz"))} {(DQ (":"))} {(DQ (-1))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("3\n") ("[0]: ") (Right_DoubleQuote "\"") (foo) (Right_DoubleQuote "\"") ("\n") 
                ("[1]: ") (Right_DoubleQuote "\"") (bar) (Right_DoubleQuote "\"") ("\n") ("[2]: ") (Right_DoubleQuote "\"") (baz) 
                (Right_DoubleQuote "\"") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [89]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ ("foo:bar:baz"))} {(DQ (":"))} {(DQ (0))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("1\n") ("[0]: ") (Right_DoubleQuote "\"") ("foo:bar:baz") (Right_DoubleQuote "\"") 
                ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [123]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ ("foo:bar:baz"))} {(DQ (":"))} {(DQ (1))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("2\n") ("[0]: ") (Right_DoubleQuote "\"") (foo) (Right_DoubleQuote "\"") ("\n") 
                ("[1]: ") (Right_DoubleQuote "\"") ("bar:baz") (Right_DoubleQuote "\"") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [147]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ ("foo:bar:baz"))} {(DQ (":"))} {(DQ (2))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("3\n") ("[0]: ") (Right_DoubleQuote "\"") (foo) (Right_DoubleQuote "\"") ("\n") 
                ("[1]: ") (Right_DoubleQuote "\"") (bar) (Right_DoubleQuote "\"") ("\n") ("[2]: ") (Right_DoubleQuote "\"") (baz) 
                (Right_DoubleQuote "\"") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [176]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ ("foo:bar:"))} {(DQ (":"))} {(DQ (-1))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("3\n") ("[0]: ") (Right_DoubleQuote "\"") (foo) (Right_DoubleQuote "\"") ("\n") 
                ("[1]: ") (Right_DoubleQuote "\"") (bar) (Right_DoubleQuote "\"") ("\n") ("[2]: ") (Right_DoubleQuote "\"") 
                (Right_DoubleQuote "\"") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [210]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ )} {(DQ (":"))} {(DQ (-1))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {(DQ ("1\n") ("[0]: ") (Right_DoubleQuote "\"") (Right_DoubleQuote "\"") ("\n"))}
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [242]
        )
      ]
    )
    (SimpleCommand
      words: [{(test_split)} {(DQ (":"))} {(DQ (":"))} {(DQ (-1))}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("2\n") ("[0]: ") (Right_DoubleQuote "\"") (Right_DoubleQuote "\"") ("\n") ("[1]: ") 
                (Right_DoubleQuote "\"") (Right_DoubleQuote "\"") ("\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [265]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ("test filter_string_list"))} 
      {
        (SQ <"\n"> <"\ttest \"x-\" = \"x$(test-string-list filter - y)\" &&\n"> 
          <"\ttest \"x-\" = \"x$(test-string-list filter no y)\" &&\n"> <"\ttest yes = \"$(test-string-list filter yes y)\" &&\n"> 
          <"\ttest yes = \"$(test-string-list filter no:yes y)\" &&\n"> <"\ttest yes = \"$(test-string-list filter yes:no y)\" &&\n"> 
          <"\ttest y1:y2 = \"$(test-string-list filter y1:y2 y)\" &&\n"> <"\ttest y2:y1 = \"$(test-string-list filter y2:y1 y)\" &&\n"> 
          <"\ttest \"x-\" = \"x$(test-string-list filter x1:x2 y)\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("test remove_duplicates"))} 
      {
        (SQ <"\n"> <"\ttest \"x-\" = \"x$(test-string-list remove_duplicates -)\" &&\n"> 
          <"\ttest \"x\" = \"x$(test-string-list remove_duplicates \"\")\" &&\n"> <"\ttest a = \"$(test-string-list remove_duplicates a)\" &&\n"> 
          <"\ttest a = \"$(test-string-list remove_duplicates a:a)\" &&\n"> <"\ttest a = \"$(test-string-list remove_duplicates a:a:a:a:a)\" &&\n"> 
          <"\ttest a:b = \"$(test-string-list remove_duplicates a:b)\" &&\n"> <"\ttest a:b = \"$(test-string-list remove_duplicates a:a:b)\" &&\n"> 
          <"\ttest a:b = \"$(test-string-list remove_duplicates a:b:b)\" &&\n"> <"\ttest a:b:c = \"$(test-string-list remove_duplicates a:b:c)\" &&\n"> 
          <"\ttest a:b:c = \"$(test-string-list remove_duplicates a:a:b:c)\" &&\n"> <"\ttest a:b:c = \"$(test-string-list remove_duplicates a:b:b:c)\" &&\n"> 
          <"\ttest a:b:c = \"$(test-string-list remove_duplicates a:b:c:c)\" &&\n"> <"\ttest a:b:c = \"$(test-string-list remove_duplicates a:a:b:b:c:c)\" &&\n"> 
          <"\ttest a:b:c = \"$(test-string-list remove_duplicates a:a:a:b:b:b:c:c:c)\"\n">
        )
      }
    )
    (C {(test_done)})
  ]
)