(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-eu)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WARNING)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'\\033[0;31m' span_id:14))}
          spids: [12]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SUCCESS)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'\\033[0;32m' span_id:19))}
          spids: [17]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:INFO)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [22]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DEBUG)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [26]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RESET)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'\\033[0m' span_id:32))}
          spids: [30]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERBOSE)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:VERBOSE span_id:37)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
              )
            }
          spids: [35]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DIR)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:44)
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(cd)} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:49)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(dirname)} 
                                            {
                                              (DQ 
                                                (braced_var_sub
                                                  token: 
                                                    (Token
                                                      id: Id.VSub_Name
                                                      val: BASH_SOURCE
                                                      span_id: 55
                                                    )
                                                  bracket_op: 
                                                    (bracket_op.ArrayIndex
                                                      expr: 
                                                        (arith_expr.ArithWord
                                                          w: {(Id.Lit_Digits 0)}
                                                        )
                                                    )
                                                )
                                              )
                                            }
                                          )
                                        ]
                                      )
                                  )
                                )
                              }
                            )
                            (C {(pwd)})
                          ]
                        )
                      ]
                    )
                )
              )
            }
          spids: [42]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:REFMT)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$DIR') (/../refmt_impl.native))}
          spids: [73]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (command.DBracket expr:(bool_expr.Unary op_id:Id.BoolUnary_f child:{(REFMT)}))
              terminator: (Token id:Id.Op_Semi val:';' span_id:89)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('Cannot find refmt at ') ($ Id.VSub_DollarName '$REFMT'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:101)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:105)
                  arg_word: {(1)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:108)
            )
          ]
          spids: [80 91]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:UNIT_TEST_INPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/unit_tests/input)}
          spids: [113]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:UNIT_TEST_OUTPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/unit_tests/actual_output)}
          spids: [118]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:UNIT_TEST_EXPECTED_OUTPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/unit_tests/expected_output)}
          spids: [123]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TYPE_TEST_INPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/typeCheckedTests/input)}
          spids: [129]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TYPE_TEST_OUTPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/typeCheckedTests/actual_output)}
          spids: [134]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TYPE_TEST_EXPECTED_OUTPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/typeCheckedTests/expected_output)}
          spids: [139]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ERROR_TEST_INPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/errorTests/input)}
          spids: [145]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ERROR_TEST_OUTPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/errorTests/actual_output)}
          spids: [150]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ERROR_TEST_EXPECTED_OUTPUT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/errorTests/expected_output)}
          spids: [155]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FAILED_TESTS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$DIR') (/failed_tests)}
          spids: [161]
        )
      ]
    )
    (command.ShFunction
      name: info
      body: 
        (command.BraceGroup
          children: [
            (C {(printf)} 
              {
                (DQ (${ Id.VSub_Name INFO) ($ Id.VSub_Number '$1') (${ Id.VSub_Name RESET) 
                  (Id.Lit_Other '\\') (n)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: debug
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} 
                          {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:214)
                    )
                  ]
                  action: [
                    (C {(printf)} 
                      {
                        (DQ (${ Id.VSub_Name DEBUG) ($ Id.VSub_Number '$1') (${ Id.VSub_Name RESET) 
                          (Id.Lit_Other '\\') (n)
                        )
                      }
                    )
                  ]
                  spids: [201 216]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: success
      body: 
        (command.BraceGroup
          children: [
            (C {(printf)} 
              {
                (DQ (${ Id.VSub_Name SUCCESS) ($ Id.VSub_Number '$1') (${ Id.VSub_Name RESET) 
                  (Id.Lit_Other '\\') (n)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: output
      body: 
        (command.BraceGroup
          children: [(C {(printf)} {(DQ ($ Id.VSub_Number '$1') (Id.Lit_Other '\\') (n))})]
        )
    )
    (command.ShFunction
      name: warning
      body: 
        (command.BraceGroup
          children: [
            (C {(printf)} 
              {
                (DQ (${ Id.VSub_Name WARNING) ($ Id.VSub_Number '$1') (${ Id.VSub_Name RESET) 
                  (Id.Lit_Other '\\') (n)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_test_dir
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} 
              {(DQ ("Setting up test dirs actual_output alongside the tests' expected_output"))}
            )
            (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$UNIT_TEST_OUTPUT')} 
              {($ Id.VSub_DollarName '$TYPE_TEST_OUTPUT')} {($ Id.VSub_DollarName '$ERROR_TEST_OUTPUT')}
            )
            (C {(touch)} {($ Id.VSub_DollarName '$FAILED_TESTS')})
          ]
        )
    )
    (C {(setup_test_dir)})
    (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (e)})
    (command.ShFunction
      name: stdin_test
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:INPUT_FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [363]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OUTPUT_FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [367]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:EXPECTED_OUTPUT_FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [371]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:HEURISTICS_FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [379]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILENAME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:385)
                        command_list: 
                          (command.CommandList
                            children: [(C {(basename)} {($ Id.VSub_DollarName '$INPUT_FILE')})]
                          )
                      )
                    }
                  spids: [384]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILEEXT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: (Token id:Id.VSub_Name val:FILENAME span_id:395)
                          suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{('*.')})
                        )
                      )
                    }
                  spids: [392]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobEqual
                              left: {($ Id.VSub_DollarName '$FILEEXT')}
                              right: {(DQ (re))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:416)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(cat)} {($ Id.VSub_DollarName '$INPUT_FILE')})
                        (command.Simple
                          words: [
                            {($ Id.VSub_DollarName '$REFMT')}
                            {(-is-interface-pp)}
                            {(false)}
                            {(-print-width)}
                            {(50)}
                            {(-parse)}
                            {(re)}
                            {(-print)}
                            {(re)}
                            {(-use-stdin)}
                            {(true)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:449)
                              fd: 2
                              arg_word: {(1)}
                            )
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:452)
                              fd: -1
                              arg_word: {($ Id.VSub_DollarName '$OUTPUT_FILE')}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [403 418]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobEqual
                              left: {($ Id.VSub_DollarName '$FILEEXT')}
                              right: {(DQ (rei))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:470)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(cat)} {($ Id.VSub_DollarName '$INPUT_FILE')})
                        (command.Simple
                          words: [
                            {($ Id.VSub_DollarName '$REFMT')}
                            {(-is-interface-pp)}
                            {(true)}
                            {(-print-width)}
                            {(50)}
                            {(-parse)}
                            {(re)}
                            {(-print)}
                            {(re)}
                            {(-use-stdin)}
                            {(true)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:503)
                              fd: 2
                              arg_word: {(1)}
                            )
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:506)
                              fd: -1
                              arg_word: {($ Id.VSub_DollarName '$OUTPUT_FILE')}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [457 472]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobEqual
                              left: {($ Id.VSub_DollarName '$FILEEXT')}
                              right: {(DQ (ml))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:524)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(cat)} {($ Id.VSub_DollarName '$INPUT_FILE')})
                        (command.Simple
                          words: [
                            {($ Id.VSub_DollarName '$REFMT')}
                            {(-heuristics-file)}
                            {($ Id.VSub_DollarName '$HEURISTICS_FILE')}
                            {(-is-interface-pp)}
                            {(false)}
                            {(-print-width)}
                            {(50)}
                            {(-parse)}
                            {(ml)}
                            {(-print)}
                            {(re)}
                            {(-use-stdin)}
                            {(true)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:561)
                              fd: 2
                              arg_word: {(1)}
                            )
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:564)
                              fd: -1
                              arg_word: {($ Id.VSub_DollarName '$OUTPUT_FILE')}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [511 526]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobEqual
                              left: {($ Id.VSub_DollarName '$FILEEXT')}
                              right: {(DQ (mli))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:582)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(cat)} {($ Id.VSub_DollarName '$INPUT_FILE')})
                        (command.Simple
                          words: [
                            {($ Id.VSub_DollarName '$REFMT')}
                            {(-heuristics-file)}
                            {($ Id.VSub_DollarName '$HEURISTICS_FILE')}
                            {(-is-interface-pp)}
                            {(true)}
                            {(-print-width)}
                            {(50)}
                            {(-parse)}
                            {(ml)}
                            {(-print)}
                            {(re)}
                            {(-use-stdin)}
                            {(true)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:619)
                              fd: 2
                              arg_word: {(1)}
                            )
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:622)
                              fd: -1
                              arg_word: {($ Id.VSub_DollarName '$OUTPUT_FILE')}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [569 584]
                )
              ]
              else_action: [
                (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED -use-stdin ') (Id.Lit_Other '\\') (n))})
                (C {(info)} 
                  {
                    (DQ ('  Cannot determine default implementation parser for extension ') 
                      (${ Id.VSub_Name FILEEXT)
                    )
                  }
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:649)
                  arg_word: {(1)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:671)
                    )
                  ]
                  action: [
                    (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED -use-stdin ') (Id.Lit_Other '\\') (n))})
                    (C {(info)} {(DQ ('  There was an error when testing -use-stdin'))})
                    (C {(info)} {(DQ ('  for input file ') ($ Id.VSub_DollarName '$INPUT_FILE'))})
                    (C {(info)} 
                      {
                        (DQ ('  and output file ') ($ Id.VSub_DollarName '$OUTPUT_FILE') 
                          (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(echo)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:717)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [658 673]
                )
              ]
            )
            (C {(debug)} 
              {
                (DQ ('  Comparing -use-stdin results:  diff ') ($ Id.VSub_DollarName '$OUTPUT_FILE') 
                  (' ') ($ Id.VSub_DollarName '$EXPECTED_OUTPUT_FILE')
                )
              }
            )
            (C {(diff)} {(--unchanged-line-format) (Id.Lit_Equals '=') (DQ )} 
              {(--new-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} {(--old-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} {($ Id.VSub_DollarName '$OUTPUT_FILE')} 
              {($ Id.VSub_DollarName '$EXPECTED_OUTPUT_FILE')}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:774)
                    )
                  ]
                  action: [
                    (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED -use-stdin ') (Id.Lit_Other '\\') (n))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$OUTPUT_FILE') 
                          (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(info)} {(DQ ("  doesn't match expected output"))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) 
                          ($ Id.VSub_DollarName '$EXPECTED_OUTPUT_FILE') (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(echo)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:829)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [761 776]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:837)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShFunction
      name: unit_test
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [853]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:INPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [857]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OUTPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [861]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:EXPECTED_OUTPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [865]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILENAME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:871)
                        command_list: 
                          (command.CommandList
                            children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                          )
                      )
                    }
                  spids: [870]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILEEXT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: (Token id:Id.VSub_Name val:FILENAME span_id:881)
                          suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{('*.')})
                        )
                      )
                    }
                  spids: [878]
                )
              ]
            )
            (C {(info)} {(DQ ('Unit Test: ') ($ Id.VSub_DollarName '$FILE'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:902)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:913)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:929)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:940)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:950)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 960
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(basename)} {($ Id.VSub_DollarName '$FILE')})
                                            ]
                                          )
                                      )
                                    )
                                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 971
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                            ]
                                          )
                                      )
                                    )
                                  } {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:981)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:REFILE)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 988
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                              ]
                                            )
                                        ) (.re)
                                      )
                                    }
                                  spids: [986]
                                )
                              ]
                            )
                          ]
                          spids: [955 983]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:REFILE)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 1004
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                          ]
                                        )
                                    ) (.rei)
                                  )
                                }
                              spids: [1002]
                            )
                          ]
                        )
                      ]
                    )
                    (C {(debug)} 
                      {
                        (DQ ($ Id.VSub_DollarName '$REFMT') (' -heuristics-file ') 
                          ($ Id.VSub_DollarName '$INPUT') ('/arity.txt -print-width 50 -print re ') ($ Id.VSub_DollarName '$INPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$REFILE')
                        )
                      }
                    )
                    (command.Simple
                      words: [
                        {($ Id.VSub_DollarName '$REFMT')}
                        {(-heuristics-file)}
                        {($ Id.VSub_DollarName '$INPUT') (/arity.txt)}
                        {(-print-width)}
                        {(50)}
                        {(-print)}
                        {(re)}
                        {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:1054)
                          fd: 2
                          arg_word: {(1)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:1057)
                          fd: -1
                          arg_word: 
                            {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$REFILE')}
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1077)
                            )
                          ]
                          action: [
                            (C {(warning)} 
                              {
                                (DQ ('  \xe2\x8a\x98 TEST FAILED CONVERTING ML TO RE') 
                                  (Id.Lit_Other '\\') (n)
                                )
                              }
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1091)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1064 1079]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FILE)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$REFILE')}
                          spids: [1099]
                        )
                      ]
                    )
                  ]
                  spids: [897 952]
                )
              ]
              else_action: [
                (C {(debug)} 
                  {
                    (DQ ("  '") ($ Id.VSub_DollarName '$REFMT') (' -print-width 50 -print re ') 
                      ($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') ($ Id.VSub_DollarName '$OUTPUT') (/) 
                      ($ Id.VSub_DollarName '$FILE') ("'")
                    )
                  }
                )
                (command.Simple
                  words: [
                    {($ Id.VSub_DollarName '$REFMT')}
                    {(-print-width)}
                    {(50)}
                    {(-print)}
                    {(re)}
                    {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:1137)
                      fd: 2
                      arg_word: {(1)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1140)
                      fd: -1
                      arg_word: {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                    )
                  ]
                )
              ]
            )
            (C {(debug)} 
              {
                (DQ ('  Comparing results:  diff ') ($ Id.VSub_DollarName '$OUTPUT') (/) 
                  ($ Id.VSub_DollarName '$FILE') (' ') ($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')
                )
              }
            )
            (C {(diff)} {(--unchanged-line-format) (Id.Lit_Equals '=') (DQ )} 
              {(--new-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} {(--old-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} 
              {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} {($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1208)
                    )
                  ]
                  action: [
                    (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(info)} {(DQ ("  doesn't match expected output"))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(echo)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1267)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [1195 1210]
                )
              ]
            )
            (C {(debug)} {(DQ ('Testing -use-stdin'))})
            (C {(stdin_test)} {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_Number '$1')} 
              {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} {($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} 
              {($ Id.VSub_DollarName '$INPUT') (/arity.txt)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1315)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1320)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [1302 1317]
                )
              ]
              else_action: [(C {(success)} {(DQ ('  \xe2\x98\x91 PASS'))}) (C {(echo)})]
            )
          ]
        )
    )
    (command.ShFunction
      name: idempotent_test
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1352]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:INPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [1356]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OUTPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [1360]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILENAME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1366)
                        command_list: 
                          (command.CommandList
                            children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                          )
                      )
                    }
                  spids: [1365]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILEEXT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: (Token id:Id.VSub_Name val:FILENAME span_id:1376)
                          suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{('*.')})
                        )
                      )
                    }
                  spids: [1373]
                )
              ]
            )
            (C {(info)} {(DQ ('Idempotent Test: ') ($ Id.VSub_DollarName '$FILE'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1397)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1408)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1424)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1435)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1445)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 1455
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(basename)} {($ Id.VSub_DollarName '$FILE')})
                                            ]
                                          )
                                      )
                                    )
                                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 1466
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                            ]
                                          )
                                      )
                                    )
                                  } {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1476)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:REFILE)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 1483
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                              ]
                                            )
                                        ) (.re)
                                      )
                                    }
                                  spids: [1481]
                                )
                              ]
                            )
                          ]
                          spids: [1450 1478]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:REFILE)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 1499
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                          ]
                                        )
                                    ) (.rei)
                                  )
                                }
                              spids: [1497]
                            )
                          ]
                        )
                      ]
                    )
                    (C {(debug)} 
                      {
                        (DQ ('  Converting ') ($ Id.VSub_DollarName '$FILE') (' to ') 
                          ($ Id.VSub_DollarName '$REFILE') (':')
                        )
                      }
                    )
                    (C {(debug)} 
                      {
                        (DQ ('  Formatting Once: ') ($ Id.VSub_DollarName '$REFMT') 
                          (' -heuristics-file ') ($ Id.VSub_DollarName '$INPUT') ('/arity.txt -print-width 50 -print re ') 
                          ($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') ($ Id.VSub_DollarName '$OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$REFILE')
                        )
                      }
                    )
                    (command.Simple
                      words: [
                        {($ Id.VSub_DollarName '$REFMT')}
                        {(-heuristics-file)}
                        {($ Id.VSub_DollarName '$INPUT') (/arity.txt)}
                        {(-print-width)}
                        {(50)}
                        {(-print)}
                        {(re)}
                        {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:1562)
                          fd: 2
                          arg_word: {(1)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:1565)
                          fd: -1
                          arg_word: 
                            {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$REFILE')}
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1585)
                            )
                          ]
                          action: [
                            (C {(warning)} {(DQ ('\xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1599)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1572 1587]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FILE)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$REFILE')}
                          spids: [1607]
                        )
                      ]
                    )
                    (C {(debug)} 
                      {
                        (DQ ('  Generating output again: ') ($ Id.VSub_DollarName '$REFMT') 
                          (' -print-width 50 -print re ') ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') 
                          ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') (.formatted)
                        )
                      }
                    )
                    (command.Simple
                      words: [
                        {($ Id.VSub_DollarName '$REFMT')}
                        {(-print-width)}
                        {(50)}
                        {(-print)}
                        {(re)}
                        {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:1642)
                          fd: 2
                          arg_word: {(1)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:1645)
                          fd: -1
                          arg_word: 
                            {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') 
                              (.formatted)
                            }
                        )
                      ]
                    )
                  ]
                  spids: [1392 1447]
                )
              ]
              else_action: [
                (C {(debug)} 
                  {
                    (DQ ("  Formatting Once: '") ($ Id.VSub_DollarName '$REFMT') 
                      (' -print-width 50 -print re ') ($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') 
                      ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') ("'")
                    )
                  }
                )
                (command.Simple
                  words: [
                    {($ Id.VSub_DollarName '$REFMT')}
                    {(-print-width)}
                    {(50)}
                    {(-print)}
                    {(re)}
                    {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:1687)
                      fd: 2
                      arg_word: {(1)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1690)
                      fd: -1
                      arg_word: {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                    )
                  ]
                )
                (C {(debug)} 
                  {
                    (DQ ('  Generating output again: ') ($ Id.VSub_DollarName '$REFMT') 
                      (' -print-width 50 -print re ') ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') 
                      ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') (.formatted)
                    )
                  }
                )
                (command.Simple
                  words: [
                    {($ Id.VSub_DollarName '$REFMT')}
                    {(-print-width)}
                    {(50)}
                    {(-print)}
                    {(re)}
                    {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:1729)
                      fd: 2
                      arg_word: {(1)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1732)
                      fd: -1
                      arg_word: 
                        {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') 
                          (.formatted)
                        }
                    )
                  ]
                )
              ]
            )
            (C {(diff)} {(--unchanged-line-format) (Id.Lit_Equals '=') (DQ )} 
              {(--new-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} {(--old-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} 
              {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') (.formatted)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1786)
                    )
                  ]
                  action: [
                    (C {(warning)} {(DQ ('\xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (.formatted) (${ Id.VSub_Name RESET) (Id.Lit_Other '\\') (n)
                        )
                      }
                    )
                    (C {(info)} {(DQ ('  is not same as'))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1842)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [1773 1788]
                )
              ]
            )
            (C {(debug)} {(DQ ('Testing -use-stdin'))})
            (C {(stdin_test)} {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_Number '$1')} 
              {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} 
              {($ Id.VSub_DollarName '$INPUT') (/arity.txt)}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1890)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1895)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [1877 1892]
                )
              ]
              else_action: [
                (C {(stdin_test)} {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} 
                  {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE') (.formatted)} {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} 
                  {($ Id.VSub_DollarName '$INPUT') (/arity.txt)}
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_eq
                                      left: {($ Id.VSub_QMark '$?')}
                                      right: {(0)}
                                    )
                                )
                              ]
                              negated: T
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:1935)
                        )
                      ]
                      action: [
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1940)
                          arg_word: {(1)}
                        )
                      ]
                      spids: [1922 1937]
                    )
                  ]
                  else_action: [(C {(success)} {(DQ ('  \xe2\x98\x91 PASS'))}) (C {(echo)})]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: typecheck_test
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1975]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:INPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [1979]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OUTPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [1983]
                )
              ]
            )
            (C {(info)} {(DQ ('Typecheck Test: ') ($ Id.VSub_DollarName '$FILE'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2001)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2012)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2028)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2039)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2049)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 2059
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(basename)} {($ Id.VSub_DollarName '$FILE')})
                                            ]
                                          )
                                      )
                                    )
                                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 2070
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                            ]
                                          )
                                      )
                                    )
                                  } {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2080)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:REFILE)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 2087
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                              ]
                                            )
                                        ) (.re)
                                      )
                                    }
                                  spids: [2085]
                                )
                              ]
                            )
                          ]
                          spids: [2054 2082]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:REFILE)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 2103
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                          ]
                                        )
                                    ) (.rei)
                                  )
                                }
                              spids: [2101]
                            )
                          ]
                        )
                      ]
                    )
                    (C {(debug)} 
                      {
                        (DQ ('  Converting ') ($ Id.VSub_DollarName '$FILE') (' to ') 
                          ($ Id.VSub_DollarName '$REFILE') (':')
                        )
                      }
                    )
                    (C {(debug)} 
                      {
                        (DQ ($ Id.VSub_DollarName '$REFMT') (' -heuristics-file ') 
                          ($ Id.VSub_DollarName '$INPUT') ('/arity.txt -print-width 50 -print re ') ($ Id.VSub_DollarName '$INPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$REFILE')
                        )
                      }
                    )
                    (command.Simple
                      words: [
                        {($ Id.VSub_DollarName '$REFMT')}
                        {(-heuristics-file)}
                        {($ Id.VSub_DollarName '$INPUT') (/arity.txt)}
                        {(-print-width)}
                        {(50)}
                        {(-print)}
                        {(re)}
                        {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2164)
                          fd: 2
                          arg_word: {(1)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:2167)
                          fd: -1
                          arg_word: 
                            {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$REFILE')}
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2187)
                            )
                          ]
                          action: [
                            (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:2201)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [2174 2189]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FILE)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$REFILE')}
                          spids: [2209]
                        )
                      ]
                    )
                  ]
                  spids: [1996 2051]
                )
              ]
              else_action: [
                (C {(debug)} 
                  {
                    (DQ ('  Formatting: ') ($ Id.VSub_DollarName '$REFMT') 
                      (' -print-width 50 -print re ') ($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE') (' 2>&1 > ') 
                      ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')
                    )
                  }
                )
                (command.Simple
                  words: [
                    {($ Id.VSub_DollarName '$REFMT')}
                    {(-print-width)}
                    {(50)}
                    {(-print)}
                    {(re)}
                    {($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2246)
                      fd: 2
                      arg_word: {(1)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:2249)
                      fd: -1
                      arg_word: {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                    )
                  ]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_eq
                                      left: {($ Id.VSub_QMark '$?')}
                                      right: {(0)}
                                    )
                                )
                              ]
                              negated: T
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:2269)
                        )
                      ]
                      action: [
                        (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:2283)
                          arg_word: {(1)}
                        )
                      ]
                      spids: [2256 2271]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (DQ 
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2299)
                                command_list: 
                                  (command.CommandList
                                    children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                  )
                              )
                            )
                          } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                          {
                            (DQ 
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2310)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.re)})
                                    ]
                                  )
                              )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2320)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:COMPILE_FLAGS)
                          op: assign_op.Equal
                          rhs: {(DQ ('-intf-suffix .rei -impl'))}
                          spids: [2325]
                        )
                      ]
                    )
                  ]
                  spids: [2294 2322]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:COMPILE_FLAGS)
                      op: assign_op.Equal
                      rhs: {(DQ (-intf))}
                      spids: [2334]
                    )
                  ]
                )
              ]
            )
            (C {(debug)} 
              {
                (DQ ('  Compiling: ocamlc -c -pp ') ($ Id.VSub_DollarName '$REFMT') (' ') 
                  ($ Id.VSub_DollarName '$COMPILE_FLAGS') (' ') ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')
                )
              }
            )
            (C {(ocamlc)} {(-c)} {(-pp)} {($ Id.VSub_DollarName '$REFMT')} 
              {($ Id.VSub_DollarName '$COMPILE_FLAGS')} {(DQ ($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE'))}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2388)
                    )
                  ]
                  action: [
                    (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:2402)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [2375 2390]
                )
              ]
            )
            (C {(success)} {(DQ ('  \xe2\x98\x91 PASS'))})
            (C {(echo)})
          ]
        )
    )
    (command.ShFunction
      name: error_test
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FILE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2432]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:INPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [2436]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OUTPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [2440]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:EXPECTED_OUTPUT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$4')}
                  spids: [2444]
                )
              ]
            )
            (C {(info)} {(DQ ('Error Test: ') ($ Id.VSub_DollarName '$FILE'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2462)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2473)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.ml)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2489)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                                      )
                                  )
                                )
                              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2500)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(basename)} {($ Id.VSub_DollarName '$FILE')} {(.mli)})
                                        ]
                                      )
                                  )
                                )
                              } {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2510)
                    )
                  ]
                  action: [
                    (C {(warning)} 
                      {
                        (DQ 
                          (
'  \xe2\x8a\x98 FAILED: .ml files should not need to be run against error tests. '
                          ) (Id.Lit_Other '\\') (n)
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:2524)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [2457 2512]
                )
              ]
              else_action: [
                (C {(debug)} 
                  {
                    (DQ ("  '") ($ Id.VSub_DollarName '$REFMT') (' -print-width 50 -print re ') 
                      ($ Id.VSub_DollarName '$INPUT') (/) ($ Id.VSub_DollarName '$FILE') (' &> ') ($ Id.VSub_DollarName '$OUTPUT') (/) 
                      ($ Id.VSub_DollarName '$FILE') ("'")
                    )
                  }
                )
                (C {(cd)} {($ Id.VSub_DollarName '$INPUT')})
                (command.Simple
                  words: [
                    {($ Id.VSub_DollarName '$REFMT')}
                    {(-print-width)}
                    {(50)}
                    {(-print)}
                    {(re)}
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2568)
                        command_list: 
                          (command.CommandList
                            children: [(C {(basename)} {($ Id.VSub_DollarName '$FILE')})]
                          )
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_AndGreat val:'&>' span_id:2574)
                      fd: -1
                      arg_word: {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
                    )
                  ]
                )
                (command.Simple
                  words: [{(cd)} {(-)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:2585)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
            )
            (C {(debug)} 
              {
                (DQ ('  Comparing results:  diff ') ($ Id.VSub_DollarName '$OUTPUT') (/) 
                  ($ Id.VSub_DollarName '$FILE') (' ') ($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')
                )
              }
            )
            (C {(diff)} {(--unchanged-line-format) (Id.Lit_Equals '=') (DQ )} 
              {(--new-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} {(--old-line-format) (Id.Lit_Equals '=') (DQ (':%dn: %L'))} 
              {($ Id.VSub_DollarName '$OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')} {($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) ($ Id.VSub_DollarName '$FILE')}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_QMark '$?')}
                                  right: {(0)}
                                )
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2651)
                    )
                  ]
                  action: [
                    (C {(warning)} {(DQ ('  \xe2\x8a\x98 FAILED') (Id.Lit_Other '\\') (n))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(info)} {(DQ ("  doesn't match expected output"))})
                    (C {(info)} 
                      {
                        (DQ ('  ') (${ Id.VSub_Name INFO) ($ Id.VSub_DollarName '$EXPECTED_OUTPUT') (/) 
                          ($ Id.VSub_DollarName '$FILE') (${ Id.VSub_Name RESET)
                        )
                      }
                    )
                    (C {(echo)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:2710)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [2638 2653]
                )
              ]
            )
            (C {(success)} {(DQ ('  \xe2\x98\x91 PASS'))})
            (C {(echo)})
          ]
        )
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(cd)} {($ Id.VSub_DollarName '$UNIT_TEST_INPUT')})
        (command.Pipeline
          children: [
            (C {(find)} {(.)} {(-type)} {(f)} 
              {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\(' span_id:2745))} {(-name)} {(DQ ('*.re*'))} {(-or)} {(-name)} {(DQ ('*.ml*'))} 
              {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\)' span_id:2761))}
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:2765)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(file)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:2770)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(unit_test)} {($ Id.VSub_DollarName '$file')} 
                      {($ Id.VSub_DollarName '$UNIT_TEST_INPUT')} {($ Id.VSub_DollarName '$UNIT_TEST_OUTPUT')} {($ Id.VSub_DollarName '$UNIT_TEST_EXPECTED_OUTPUT')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2799)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {(DQ ($ Id.VSub_DollarName '$file') (' -- failed unit_test'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:2811)
                                  fd: -1
                                  arg_word: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                                )
                              ]
                            )
                          ]
                          spids: [2786 2801]
                        )
                      ]
                    )
                    (C {(idempotent_test)} {($ Id.VSub_DollarName '$file')} 
                      {($ Id.VSub_DollarName '$UNIT_TEST_INPUT')} {($ Id.VSub_DollarName '$UNIT_TEST_OUTPUT')} {($ Id.VSub_DollarName '$UNIT_TEST_EXPECTED_OUTPUT')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2844)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {(DQ ($ Id.VSub_DollarName '$file') (' -- failed idempotent_test'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:2856)
                                  fd: -1
                                  arg_word: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                                )
                              ]
                            )
                          ]
                          spids: [2831 2846]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
          negated: F
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(cd)} {($ Id.VSub_DollarName '$TYPE_TEST_INPUT')})
        (command.Pipeline
          children: [
            (C {(find)} {(.)} {(-type)} {(f)} 
              {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\(' span_id:2880))} {(-name)} {(DQ ('*.re*'))} {(-or)} {(-name)} {(DQ ('*.ml*'))} 
              {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\)' span_id:2896))}
            )
            (C {(sort)})
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:2904)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(file)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:2909)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(typecheck_test)} {($ Id.VSub_DollarName '$file')} 
                      {($ Id.VSub_DollarName '$TYPE_TEST_INPUT')} {($ Id.VSub_DollarName '$TYPE_TEST_OUTPUT')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2936)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {(DQ ($ Id.VSub_DollarName '$file') (' -- failed typecheck_test'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:2948)
                                  fd: -1
                                  arg_word: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                                )
                              ]
                            )
                          ]
                          spids: [2923 2938]
                        )
                      ]
                    )
                    (C {(unit_test)} {($ Id.VSub_DollarName '$file')} 
                      {($ Id.VSub_DollarName '$TYPE_TEST_INPUT')} {($ Id.VSub_DollarName '$TYPE_TEST_OUTPUT')} {($ Id.VSub_DollarName '$TYPE_TEST_EXPECTED_OUTPUT')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2980)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {(DQ ($ Id.VSub_DollarName '$file') (' -- failed unit_test'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:2992)
                                  fd: -1
                                  arg_word: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                                )
                              ]
                            )
                          ]
                          spids: [2967 2982]
                        )
                      ]
                    )
                    (C {(idempotent_test)} {($ Id.VSub_DollarName '$file')} 
                      {($ Id.VSub_DollarName '$TYPE_TEST_INPUT')} {($ Id.VSub_DollarName '$TYPE_TEST_OUTPUT')} {($ Id.VSub_DollarName '$TYPE_TEST_EXPECTED_OUTPUT')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3024)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {(DQ ($ Id.VSub_DollarName '$file') (' -- failed idempotent_test'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:3036)
                                  fd: -1
                                  arg_word: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                                )
                              ]
                            )
                          ]
                          spids: [3011 3026]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
          negated: F
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(cd)} {($ Id.VSub_DollarName '$ERROR_TEST_INPUT')})
        (command.Pipeline
          children: [
            (C {(find)} {(.)} {(-type)} {(f)} 
              {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\(' span_id:3060))} {(-name)} {(DQ ('*.re*'))} {(-or)} {(-name)} {(DQ ('*.ml*'))} 
              {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\)' span_id:3076))}
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:3080)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(file)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:3085)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(error_test)} {($ Id.VSub_DollarName '$file')} 
                      {($ Id.VSub_DollarName '$ERROR_TEST_INPUT')} {($ Id.VSub_DollarName '$ERROR_TEST_OUTPUT')} {($ Id.VSub_DollarName '$ERROR_TEST_EXPECTED_OUTPUT')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_QMark '$?')}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3114)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {(DQ ($ Id.VSub_DollarName '$file') (' -- failed error_test'))}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:3126)
                                  fd: -1
                                  arg_word: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                                )
                              ]
                            )
                          ]
                          spids: [3101 3116]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
          negated: F
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: Id.BoolUnary_s
                      child: {($ Id.VSub_DollarName '$FAILED_TESTS')}
                    )
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:3145)
            )
          ]
          action: [
            (C {(warning)} {(DQ ('Failed tests:'))})
            (C {(cat)} {($ Id.VSub_DollarName '$FAILED_TESTS')})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:3162)
              arg_word: {(1)}
            )
          ]
          spids: [3136 3147]
        )
      ]
    )
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:3169) arg_word:{(0)})
  ]
)