(CommandList
  children: [
    (FuncDef
      name: test_sort
      body: 
        (BraceGroup
          children: [
            (FuncDef
              name: do_one
              body: 
                (BraceGroup
                  children: [
                    (C {(sort_list)} {(0)} 
                      {
                        (BracedVarSub
                          token: <VSub_Name list>
                          prefix_op: VSub_Pound
                          bracket_op: (WholeArray op_id:Lit_At)
                          spids: [24 30]
                        ) (-1)
                      }
                    )
                    (C {(assertEquals)} {(DQ (0))} {(DQ ($ VSub_QMark "$?"))})
                    (C {(typeset)} {(-i)} {(i)})
                    (ForExpr
                      init: 
                        (BinaryAssign
                          op_id: Arith_Equal
                          left: (LhsName name:i)
                          right: (ArithWord w:{(Lit_Digits 0)})
                        )
                      cond: 
                        (ArithBinary
                          op_id: Arith_Less
                          left: (ArithVarRef name:i)
                          right: 
                            (ArithWord
                              w: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name list>
                                    prefix_op: VSub_Pound
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    spids: [63 69]
                                  )
                                }
                            )
                        )
                      update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
                      body: 
                        (DoGroup
                          children: [
                            (C {(assertEquals)} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name check>
                                    bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                    spids: [85 90]
                                  )
                                )
                              } 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name list>
                                    bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                    spids: [94 99]
                                  )
                                )
                              }
                            )
                          ]
                          spids: [79 103]
                        )
                    )
                  ]
                  spids: [17]
                )
              spids: [13 16]
            )
            (C {(typeset)} {(-a)} {(list)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:list)
                  op: Equal
                  rhs: {(ArrayLiteralPart)}
                  spids: [121]
                )
              ]
              spids: [121]
            )
            (C {(sort_list)} {(0)} {(0)})
            (C {(assertEquals)} {(DQ (2))} {(DQ ($ VSub_QMark "$?"))})
            (C {(assertEquals)} {(DQ (0))} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name list>
                    prefix_op: VSub_Pound
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [152 158]
                  )
                )
              }
            )
            (C {(sort_list)} {(1)} {(1)})
            (C {(assertNotEquals)} {(DQ (0))} {(DQ ($ VSub_QMark "$?"))})
            (C {(typeset)} {(-a)} {(check)})
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:list)
                      op: Equal
                      rhs: {(ArrayLiteralPart words:[{(SQ <one>)}])}
                      spids: [189]
                    )
                  ]
                  spids: [189]
                )
              terminator: <Op_Semi ";">
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:check)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(SQ <one>)}])}
                  spids: [197]
                )
              ]
              spids: [197]
            )
            (C {(do_one)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:list)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(SQ <one>)}{(SQ <two>)}{(SQ <three>)}])}
                  spids: [208]
                )
              ]
              spids: [208]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:check)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(SQ <one>)}{(SQ <three>)}{(SQ <two>)}])}
                  spids: [225]
                )
              ]
              spids: [225]
            )
            (C {(do_one)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:list)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(4)}{(3)}{(2)}{(1)}])}
                  spids: [244]
                )
              ]
              spids: [244]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:check)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(1)}{(2)}{(3)}{(4)}])}
                  spids: [256]
                )
              ]
              spids: [256]
            )
            (C {(do_one)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:list)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(SQ <" 4">)}{(SQ <"3 ">)}{(SQ <2>)}{(SQ <1>)}])}
                  spids: [271]
                )
              ]
              spids: [271]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:Redir_Less left:{(SQ <" 4">)} right:{(SQ <1>)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:check)
                          op: Equal
                          rhs: 
                            {
                              (ArrayLiteralPart
                                words: [{(SQ <" 4">)} {(SQ <1>)} {(SQ <2>)} {(SQ <"3 ">)}]
                              )
                            }
                          spids: [312]
                        )
                      ]
                      spids: [312]
                    )
                  ]
                  spids: [-1 309]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:check)
                      op: Equal
                      rhs: {(ArrayLiteralPart words:[{(SQ <1>)}{(SQ <2>)}{(SQ <"3 ">)}{(SQ <" 4">)}])}
                      spids: [335]
                    )
                  ]
                  spids: [335]
                )
              ]
              spids: [332 355]
            )
            (C {(do_one)})
            (C {(sort_list)} {(0)} {(10)})
            (C {(assertNotEquals)} {(DQ (0))} {(DQ ($ VSub_QMark "$?"))})
          ]
          spids: [10]
        )
      spids: [6 9]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(SQ </src/external-vcs/sourceforge/bashdb>)} {(Lit_Other "=")} {(SQ )} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ ("Something is wrong abs_top_srcdir is not set."))})
            (C {(exit)} {(1)})
          ]
          spids: [-1 401]
        )
      ]
      spids: [-1 415]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:abs_top_srcdir)
          op: Equal
          rhs: {(/src/external-vcs/sourceforge/bashdb)}
          spids: [417]
        )
      ]
      spids: [417]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:abs_top_srcdir)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name abs_top_srcdir>
                suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(Lit_Slash /)})
                spids: [424 428]
              ) (/)
            }
          spids: [423]
        )
      ]
      spids: [423]
    )
    (C {(.)} {(${ VSub_Name abs_top_srcdir) (test/unit/helper.sh)})
    (C {(.)} {($ VSub_Name "$abs_top_srcdir") (/lib/sort.sh)})
    (C {(set)} {(--)})
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_GlobDEqual
              left: {($ VSub_Number "$0")}
              right: {(${ VSub_Name BASH_SOURCE)}
            )
        )
        (C {(.)} {(${ VSub_Name shunit_file)})
      ]
      op_id: Op_DAmp
    )
  ]
)