⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assert.jam

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 JAM
字号:
# Copyright 2001, 2002, 2003 Dave Abrahams# Copyright 2006 Rene Rivera# Copyright 2002, 2003 Vladimir Prus# Distributed under the Boost Software License, Version 1.0.# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)import errors ;import modules ;################################################################################## Private implementation details.################################################################################## Rule added as a replacement for the regular Jam = operator but which does not# ignore trailing empty string elements.#local rule exact-equal-test ( lhs * : rhs * ){    local lhs_extended = $(lhs) xxx ;    local rhs_extended = $(rhs) xxx ;    if $(lhs_extended) = $(rhs_extended)    {        return true ;    }}# Two lists are considered set-equal if they contain the same elements, ignoring# duplicates and ordering.#local rule set-equal-test ( set1 * : set2 * ){    if ( $(set1) in $(set2) ) && ( $(set2) in $(set1) )    {        return true ;    }}################################################################################## Public interface.################################################################################## Assert the equality of A and B, ignoring trailing empty string elements.#rule equal ( a * : b * ){    if $(a) != $(b)    {        errors.error-skip-frames 3 assertion failure: \"$(a)\" "==" \"$(b)\"            (ignoring trailing empty strings) ;    }}# Assert that the result of calling RULE-NAME on the given arguments has a false# logical value (is either an empty list or all empty strings).#rule false ( rule-name args * : * ){    local result ;    module [ CALLER_MODULE ]    {        modules.poke assert : result : [ $(1) : $(2) : $(3) : $(4) : $(5) : $(6)            : $(7) : $(8) : $(9) ] ;    }    if $(result)    {        errors.error-skip-frames 3 assertion failure: Expected false result from            "[" $(rule-name) [ errors.lol->list $(args) : $(2) : $(3) : $(4) :            $(5) : $(6) : $(7) : $(8) : $(9) ] "]" : Got: "[" \"$(result)\" "]" ;    }}# Assert that ELEMENT is present in LIST.#rule "in" ( element : list * ){    if ! $(element) in $(list)    {        errors.error-skip-frames 3 assertion failure: Expected \"$(element)\" in            "[" \"$(list)\" "]" ;    }}# Assert the inequality of A and B, ignoring trailing empty string elements.#rule not-equal ( a * : b * ){    if $(a) = $(b)    {        errors.error-skip-frames 3 assertion failure: \"$(a)\" "!=" \"$(b)\"            (ignoring trailing empty strings) ;    }}# Assert that ELEMENT is not present in LIST.#rule not-in ( element : list * ){    if $(element) in $(list)    {        errors.error-skip-frames 3 assertion failure: Did not expect            \"$(element)\" in "[" \"$(list)\" "]" ;    }}# Assert the inequality of A and B as sets.#rule not-set-equal ( a * : b * ){    if [ set-equal-test $(a) : $(b) ]    {        errors.error-skip-frames 3 assertion failure: Expected "[" \"$(a)\" "]"            and "[" \"$(b)\" "]" to not be equal as sets ;    }}# Assert that A and B are not exactly equal, not ignoring trailing empty string# elements.#rule not-exact-equal ( a * : b * ){    if [ exact-equal-test $(a) : $(b) ]    {        errors.error-skip-frames 3 assertion failure: \"$(a)\" "!=" \"$(b)\" ;    }}# Assert that EXPECTED is the result of calling RULE-NAME with the given# arguments.#rule result ( expected * : rule-name args * : * ){    local result ;    module [ CALLER_MODULE ]    {        modules.poke assert : result : [ $(2) : $(3) : $(4) : $(5) : $(6) : $(7)            : $(8) : $(9) ] ;    }    if ! [ exact-equal-test $(result) : $(expected) ]    {        errors.error-skip-frames 3 assertion failure: "[" $(rule-name) [            errors.lol->list $(args) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) :            $(9) ] "]" : Expected: "[" \"$(expected)\" "]" : Got: "["            \"$(result)\" "]" ;    }}# Assert that EXPECTED is set-equal (i.e. duplicates and ordering are ignored)# to the result of calling RULE-NAME with the given arguments. Note that rules# called this way may accept at most 8 parameters.#rule result-set-equal ( expected * : rule-name args * : * ){    local result ;    module [ CALLER_MODULE ]    {        modules.poke assert : result : [ $(2) : $(3) : $(4) : $(5) : $(6) : $(7)            : $(8) : $(9) ] ;    }    if ! [ set-equal-test $(result) : $(expected) ]    {        errors.error-skip-frames 3 assertion failure: "[" $(rule-name) [            errors.lol->list $(args) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) :            $(9) ] "]" : Expected: "[" \"$(expected)\" "]" : Got: "["            \"$(result)\" "]" ;    }}# Assert the equality of A and B as sets.#rule set-equal ( a * : b * ){    if ! [ set-equal-test $(a) : $(b) ]    {        errors.error-skip-frames 3 assertion failure: Expected "[" \"$(a)\" "]"            and "[" \"$(b)\" "]" to be equal as sets ;    }}# Assert that the result of calling RULE-NAME on the given arguments has a true# logical value (is neither an empty list nor all empty strings).#rule true ( rule-name args * : * ){    local result ;    module [ CALLER_MODULE ]    {        modules.poke assert : result : [ $(1) : $(2) : $(3) : $(4) : $(5) : $(6)            : $(7) : $(8) : $(9) ] ;    }    if ! $(result)    {        errors.error-skip-frames 3 assertion failure: Expected true result from            "[" $(rule-name) [ errors.lol->list $(args) : $(2) : $(3) : $(4) :            $(5) : $(6) : $(7) : $(8) : $(9) ] "]" ;    }}# Assert the exact equality of A and B, not ignoring trailing empty string# elements.#rule exact-equal ( a * : b * ){    if ! [ exact-equal-test $(a) : $(b) ]    {        errors.error-skip-frames 3 assertion failure: \"$(a)\" "==" \"$(b)\" ;    }}# Assert that the given variable is not an empty list.#rule variable-not-empty ( name ){    local value = [ modules.peek [ CALLER_MODULE ] : $(name) ] ;    if ! $(value)-is-not-empty    {        errors.error-skip-frames 3 assertion failure: Expected variable            \"$(name)\" not to be an empty list ;    }}rule __test__ ( ){    # Helper rule used to avoid test duplication related to different list    # equality test rules.    #    local rule run-equality-test ( equality-assert : ignore-trailing-empty-strings ? )    {        local not-equality-assert = not-$(equality-assert) ;        # When the given equality test is expected to ignore trailing empty        # strings some of the test results should be inverted.        local not-equality-assert-i = not-$(equality-assert) ;        if $(ignore-trailing-empty-strings)        {            not-equality-assert-i = $(equality-assert) ;        }            $(equality-assert)         :       ;            $(equality-assert)   "" "" : "" "" ;        $(not-equality-assert-i)       : "" "" ;            $(equality-assert)   x     : x     ;        $(not-equality-assert)         : x     ;        $(not-equality-assert)   ""    : x     ;        $(not-equality-assert)   "" "" : x     ;        $(not-equality-assert-i) x     : x ""  ;            $(equality-assert)   x ""  : x ""  ;        $(not-equality-assert)   x     : "" x  ;            $(equality-assert)   "" x  : "" x  ;            $(equality-assert) 1 2 3 : 1 2 3   ;        $(not-equality-assert) 1 2 3 : 3 2 1   ;        $(not-equality-assert) 1 2 3 : 1 5 3   ;        $(not-equality-assert) 1 2 3 : 1 "" 3  ;        $(not-equality-assert) 1 2 3 : 1 1 2 3 ;        $(not-equality-assert) 1 2 3 : 1 2 2 3 ;        $(not-equality-assert) 1 2 3 : 5 6 7   ;        # Extra variables used here just to make sure Boost Jam or Boost Build        # do not handle lists with empty strings differently depending on        # whether they are literals or stored in variables.        local empty           =         ;        local empty-strings   = "" ""   ;        local x-empty-strings = x "" "" ;        local empty-strings-x = "" "" x ;            $(equality-assert)                      : $(empty)           ;        $(not-equality-assert-i) ""                 : $(empty)           ;        $(not-equality-assert-i) "" ""              : $(empty)           ;        $(not-equality-assert-i)                    : $(empty-strings)   ;        $(not-equality-assert-i) ""                 : $(empty-strings)   ;            $(equality-assert)   "" ""              : $(empty-strings)   ;            $(equality-assert)   $(empty)           : $(empty)           ;            $(equality-assert)   $(empty-strings)   : $(empty-strings)   ;        $(not-equality-assert-i) $(empty)           : $(empty-strings)   ;            $(equality-assert)   $(x-empty-strings) : $(x-empty-strings) ;            $(equality-assert)   $(empty-strings-x) : $(empty-strings-x) ;        $(not-equality-assert)   $(empty-strings-x) : $(x-empty-strings) ;        $(not-equality-assert-i) x                  : $(x-empty-strings) ;        $(not-equality-assert)   x                  : $(empty-strings-x) ;        $(not-equality-assert-i) x                  : $(x-empty-strings) ;        $(not-equality-assert-i) x ""               : $(x-empty-strings) ;            $(equality-assert)   x "" ""            : $(x-empty-strings) ;        $(not-equality-assert)   x                  : $(empty-strings-x) ;        $(not-equality-assert)   "" x               : $(empty-strings-x) ;            $(equality-assert)   "" "" x            : $(empty-strings-x) ;    }                                        # ---------------    # Equality tests.    # ---------------    run-equality-test equal : ignore-trailing-empty-strings ;    run-equality-test exact-equal ;    # -------------------------    # assert.set-equal() tests.    # -------------------------        set-equal         :         ;    not-set-equal "" ""   :         ;        set-equal "" ""   : ""      ;        set-equal "" ""   : "" ""   ;        set-equal a b c   : a b c   ;        set-equal a b c   : b c a   ;        set-equal a b c a : a b c   ;        set-equal a b c   : a b c a ;    not-set-equal a b c   : a b c d ;    not-set-equal a b c d : a b c   ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -