(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TYPES)
          op: Equal
          rhs: {(SQ <'control out in'>)}
          spids: [49]
        )
      ]
      spids: [49]
    )
    (Assignment
      keyword: Assign_Declare
      flags: [-i]
      pairs: [
        (assign_pair lhs:(LhsName name:COUNT) op:Equal spids:[90])
        (assign_pair lhs:(LhsName name:BUFLEN) op:Equal spids:[92])
      ]
      spids: [86]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:COUNT) op:Equal rhs:{(50000)} spids:[95])]
      spids: [95]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:BUFLEN) op:Equal rhs:{(2048)} spids:[98])]
      spids: [98]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$DEVICE'))} {(Lit_Other '=')} {(DQ )} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ ('testing ALL recognized usbtest devices'))})
            (C {(echo)} {(DQ )})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:TEST_ARGS) op:Equal rhs:{(DQ (-a))} spids:[142])]
              spids: [142]
            )
          ]
          spids: [16777215 126]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:TEST_ARGS) op:Equal rhs:{(DQ )} spids:[150])]
          spids: [150]
        )
      ]
      spids: [147 154]
    )
    (FuncDef
      name: do_test
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [
                            {(./testusb)}
                            {($ VSub_Name '$TEST_ARGS')}
                            {(-s)}
                            {($ VSub_Name '$BUFLEN')}
                            {(-c)}
                            {($ VSub_Name '$COUNT')}
                            {($ VSub_Star '$*')}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [183]
                            )
                          ]
                        )
                      ]
                      negated: T
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ (FAIL))})
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [16777215 187]
                )
              ]
              spids: [16777215 202]
            )
          ]
          spids: [162]
        )
      spids: [157 161]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ARGS)
          op: Equal
          rhs: {(DQ ($ VSub_Star '$*'))}
          spids: [207]
        )
      ]
      spids: [207]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$ARGS'))} {(Lit_Other '=')} {(DQ )} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ARGS)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$TYPES'))}
                  spids: [232]
                )
              ]
              spids: [232]
            )
          ]
          spids: [16777215 229]
        )
      ]
      spids: [16777215 237]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:CONFIG) op:Equal rhs:{(SQ )} spids:[247])]
      spids: [247]
    )
    (FuncDef
      name: check_config
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$CONFIG'))} {(Lit_Other '=')} {(DQ )} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CONFIG)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [279]
                        )
                      ]
                      spids: [279]
                    )
                    (C {(echo)} {(DQ ('assuming ') ($ VSub_Name '$CONFIG') (' configuration'))})
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [16777215 276]
                )
              ]
              spids: [16777215 295]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$CONFIG'))} {(Lit_Other '=')} 
                          {($ VSub_Number '$1')} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return>)]
                  spids: [16777215 313]
                )
              ]
              spids: [16777215 319]
            )
            (C {(echo)} 
              {
                (DQ ('** device must be in ') ($ VSub_Number '$1') (" config, but it's ") 
                  ($ VSub_Name '$CONFIG') (' instead')
                )
              }
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [257]
        )
      spids: [252 256]
    )
    (C {(echo)} {(DQ ('TESTING:  ') ($ VSub_Name '$ARGS'))})
    (While
      cond: [(C {(Lit_Other ':')} {(true)})]
      body: 
        (DoGroup
          children: [
            (C {(echo)} 
              {
                (CommandSubPart
                  command_list: (CommandList children:[(C {(date)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [361 363]
                )
              }
            )
            (ForEach
              iter_name: TYPE
              iter_words: [{($ VSub_Name '$ARGS')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:COUNT)
                          op: Equal
                          rhs: {(5000)}
                          spids: [383]
                        )
                      ]
                      spids: [383]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BUFLEN)
                          op: Equal
                          rhs: {(2048)}
                          spids: [387]
                        )
                      ]
                      spids: [387]
                    )
                    (Case
                      to_match: {($ VSub_Name '$TYPE')}
                      arms: [
                        (case_arm
                          pat_list: [{(control)}]
                          action: [
                            (C {(echo)} {(SQ <'** Control test cases:'>)})
                            (C {(echo)} {(DQ ('test 9: ch9 postconfig'))})
                            (C {(do_test)} {(-t)} {(9)} {(-c)} {(5000)})
                            (C {(echo)} {(DQ ('test 10: control queueing'))})
                            (C {(do_test)} {(-t)} {(10)} {(-c)} {(5000)})
                            (C {(echo)} {(DQ ('test 14: control writes'))})
                            (C {(do_test)} {(-t)} {(14)} {(-c)} {(15000)} {(-s)} {(256)} {(-v)} {(1)})
                            (C {(echo)} {(DQ ('test 21: control writes, unaligned'))})
                            (C {(do_test)} {(-t)} {(21)} {(-c)} {(100)} {(-s)} {(256)} {(-v)} {(1)})
                          ]
                          spids: [412 413 523 16777215]
                        )
                        (case_arm
                          pat_list: [{(out)}]
                          action: [
                            (C {(check_config)} {(sink-src)})
                            (C {(echo)} {(SQ <'** Host Write (OUT) test cases:'>)})
                            (C {(echo)} 
                              {(DQ ('test 1: ') ($ VSub_Name '$COUNT') (' transfers, same size'))}
                            )
                            (C {(do_test)} {(-t)} {(1)})
                            (C {(echo)} 
                              {
                                (DQ ('test 3: ') ($ VSub_Name '$COUNT') 
                                  (' transfers, variable/short size')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(3)} {(-v)} {(421)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(100)}
                                  spids: [581]
                                )
                              ]
                              spids: [581]
                            )
                            (C {(echo)} 
                              {
                                (DQ ('test 17: ') ($ VSub_Name '$COUNT') 
                                  (' transfers, unaligned DMA map by core')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(17)})
                            (C {(echo)} 
                              {
                                (DQ ('test 19: ') ($ VSub_Name '$COUNT') 
                                  (' transfers, unaligned DMA map by usb_alloc_coherent')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(19)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(2000)}
                                  spids: [619]
                                )
                              ]
                              spids: [619]
                            )
                            (C {(echo)} 
                              {
                                (DQ ('test 5: ') ($ VSub_Name '$COUNT') 
                                  (' scatterlists, same size entries')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(5)})
                            (C {(echo)} 
                              {
                                (DQ ('test 7a: ') ($ VSub_Name '$COUNT') 
                                  (' scatterlists, variable size/short entries')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(7)} {(-v)} {(579)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(4096)}
                                  spids: [664]
                                )
                              ]
                              spids: [664]
                            )
                            (C {(echo)} 
                              {
                                (DQ ('test 7b: ') ($ VSub_Name '$COUNT') 
                                  (' scatterlists, variable size/bigger entries')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(7)} {(-v)} {(41)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(64)}
                                  spids: [688]
                                )
                              ]
                              spids: [688]
                            )
                            (C {(echo)} 
                              {
                                (DQ ('test 7c: ') ($ VSub_Name '$COUNT') 
                                  (' scatterlists, variable size/micro entries')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(7)} {(-v)} {(63)})
                          ]
                          spids: [527 528 712 16777215]
                        )
                        (case_arm
                          pat_list: [{(iso-out)}]
                          action: [
                            (C {(check_config)} {(sink-src)})
                            (C {(echo)} {(SQ <'** Host ISOCHRONOUS Write (OUT) test cases:'>)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(24500)}
                                  spids: [745]
                                )
                              ]
                              spids: [745]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(1000)}
                                  spids: [750]
                                )
                              ]
                              spids: [750]
                            )
                            (C {(echo)} 
                              {(DQ ('test 15: ') ($ VSub_Name '$COUNT') (' transfers, same size'))}
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(32768)}
                                  spids: [772]
                                )
                              ]
                              spids: [772]
                            )
                            (C {(do_test)} {(-t)} {(15)} {(-g)} {(8)} {(-v)} {(0)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(100)}
                                  spids: [801]
                                )
                              ]
                              spids: [801]
                            )
                            (C {(echo)} 
                              {(DQ ('test 22: ') ($ VSub_Name '$COUNT') (' transfers, non aligned'))}
                            )
                            (C {(do_test)} {(-t)} {(22)} {(-g)} {(8)} {(-v)} {(0)})
                          ]
                          spids: [716 717 830 16777215]
                        )
                        (case_arm
                          pat_list: [{(KW_In in)}]
                          action: [
                            (C {(check_config)} {(sink-src)})
                            (C {(echo)} {(SQ <'** Host Read (IN) test cases:'>)})
                            (C {(echo)} 
                              {(DQ ('test 2: ') ($ VSub_Name '$COUNT') (' transfers, same size'))}
                            )
                            (C {(do_test)} {(-t)} {(2)})
                            (C {(echo)} 
                              {
                                (DQ ('test 4: ') ($ VSub_Name '$COUNT') (' transfers, variable size'))
                              }
                            )
                            (C {(do_test)} {(-t)} {(4)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(100)}
                                  spids: [893]
                                )
                              ]
                              spids: [893]
                            )
                            (C {(echo)} 
                              {
                                (DQ ('test 18: ') ($ VSub_Name '$COUNT') 
                                  (' transfers, unaligned DMA map by core')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(18)})
                            (C {(echo)} 
                              {
                                (DQ ('test 20: ') ($ VSub_Name '$COUNT') 
                                  (' transfers, unaligned DMA map by usb_alloc_coherent')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(20)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(2000)}
                                  spids: [931]
                                )
                              ]
                              spids: [931]
                            )
                            (C {(echo)} 
                              {
                                (DQ ('test 6: ') ($ VSub_Name '$COUNT') 
                                  (' scatterlists, same size entries')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(6)})
                            (C {(echo)} 
                              {
                                (DQ ('test 8: ') ($ VSub_Name '$COUNT') 
                                  (' scatterlists, variable size entries')
                                )
                              }
                            )
                            (C {(do_test)} {(-t)} {(8)})
                          ]
                          spids: [834 835 967 16777215]
                        )
                        (case_arm
                          pat_list: [{(iso-in)}]
                          action: [
                            (C {(check_config)} {(sink-src)})
                            (C {(echo)} {(SQ <'** Host ISOCHRONOUS Read (IN) test cases:'>)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(24500)}
                                  spids: [1000]
                                )
                              ]
                              spids: [1000]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(1000)}
                                  spids: [1005]
                                )
                              ]
                              spids: [1005]
                            )
                            (C {(echo)} 
                              {(DQ ('test 16: ') ($ VSub_Name '$COUNT') (' transfers, same size'))}
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(32768)}
                                  spids: [1027]
                                )
                              ]
                              spids: [1027]
                            )
                            (C {(do_test)} {(-t)} {(16)} {(-g)} {(8)} {(-v)} {(0)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(100)}
                                  spids: [1056]
                                )
                              ]
                              spids: [1056]
                            )
                            (C {(echo)} 
                              {(DQ ('test 23: ') ($ VSub_Name '$COUNT') (' transfers, unaligned'))}
                            )
                            (C {(do_test)} {(-t)} {(23)} {(-g)} {(8)} {(-v)} {(0)})
                          ]
                          spids: [971 972 1085 16777215]
                        )
                        (case_arm
                          pat_list: [{(halt)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(2000)}
                                  spids: [1109]
                                )
                              ]
                              spids: [1109]
                            )
                            (C {(echo)} {(DQ ('test 13: ') ($ VSub_Name '$COUNT') (' halt set/clear'))})
                            (C {(do_test)} {(-t)} {(13)})
                          ]
                          spids: [1089 1090 1129 16777215]
                        )
                        (case_arm
                          pat_list: [{(unlink)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(2000)}
                                  spids: [1137]
                                )
                              ]
                              spids: [1137]
                            )
                            (C {(echo)} {(DQ ('test 11: ') ($ VSub_Name '$COUNT') (' read unlinks'))})
                            (C {(do_test)} {(-t)} {(11)})
                            (C {(echo)} {(DQ ('test 12: ') ($ VSub_Name '$COUNT') (' write unlinks'))})
                            (C {(do_test)} {(-t)} {(12)})
                          ]
                          spids: [1133 1134 1174 16777215]
                        )
                        (case_arm
                          pat_list: [{(loop)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BUFLEN)
                                  op: Equal
                                  rhs: {(2048)}
                                  spids: [1186]
                                )
                              ]
                              spids: [1186]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:COUNT)
                                  op: Equal
                                  rhs: {(32)}
                                  spids: [1190]
                                )
                              ]
                              spids: [1190]
                            )
                            (C {(check_config)} {(loopback)})
                            (C {(echo)} 
                              {
                                (DQ ('write ') ($ VSub_Name '$COUNT') (' buffers of ') 
                                  ($ VSub_Name '$BUFLEN') (' bytes, read them back')
                                )
                              }
                            )
                            (C {(echo)} 
                              {
                                (DQ ('write ') ($ VSub_Name '$COUNT') 
                                  (' variable size buffers, read them back')
                                )
                              }
                            )
                          ]
                          spids: [1178 1179 1232 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (C {(echo)} {(DQ ("Don't understand test type ") ($ VSub_Name '$TYPE'))})
                            (Sentence
                              child: (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [1236 1237 16777215 1254]
                        )
                      ]
                      spids: [405 409 1254]
                    )
                    (C {(echo)} {(SQ )})
                  ]
                  spids: [376 1263]
                )
              spids: [372 16777215]
            )
          ]
          spids: [356 1265]
        )
    )
  ]
)