• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
      • Std/lists
      • Std/alists
      • Obags
      • Std/util
      • Std/strings
      • Std/osets
      • Std/io
      • Std/basic
      • Std/system
      • Std/typed-lists
      • Std/bitsets
      • Std/testing
        • Must-fail
        • Assert!-stobj
        • Must-eval-to
        • Assert!
        • Must-succeed
          • Must-succeed*
          • Must-succeed*
            • Assert?
            • Must-fail-with-soft-error
            • Must-fail-with-hard-error
            • Must-fail-with-error
            • Must-eval-to-t
            • Must-prove
            • Must-not-prove
            • Must-not-be-table-key
            • Must-be-redundant
            • Must-fail-local
            • Must-be-table-key
            • Assert-equal
          • Std/typed-alists
          • Std/stobjs
        • Proof-automation
        • Macro-libraries
        • ACL2
        • Interfacing-tools
        • Hardware-verification
        • Software-verification
        • Math
        • Testing-utilities
      • Std/testing
      • Errors
      • Must-succeed

      Must-succeed*

      A variant of must-succeed that accepts multiple forms.

      (must-succeed* form1
                     ...
                     formN
                     :with-output-off ...
                     :check-expansion ...)

      The N forms must be embedded event forms, because they are put into a progn so that earlier forms are evaluated before considering later forms in the sequence. This is a difference with must-succeed, whose form is required to return an error triple without necessarily being an embedded event form; since must-succeed takes only one form, there is no issue of earlier forms being evaluated before considering later forms as in must-succeed*.

      The forms may be followed by :with-output-off and/or :check-expansion, as in must-succeed.

      Macro: must-succeed*

      (defmacro must-succeed* (&rest args)
       (mv-let (erp forms options)
               (partition-rest-and-keyword-args
                    args
                    '(:with-output-off :check-expansion))
        (if erp
         '(er
           hard? 'must-succeed*
           "The arguments of MUST-SUCCEED* must be zero or more forms ~
                      followed by the options :WITH-OUTPUT-OFF and :CHECK-EXPANSION.")
         (let ((with-output-off-pair (assoc :with-output-off options))
               (check-expansion-pair (assoc :check-expansion options)))
          (cons
           'must-succeed
           (cons (cons 'progn forms)
                 (append (if with-output-off-pair
                             (cons ':with-output-off
                                   (cons (cdr with-output-off-pair) 'nil))
                           nil)
                         (if check-expansion-pair
                             (cons ':check-expansion
                                   (cons (cdr check-expansion-pair) 'nil))
                           nil))))))))