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

📄 check-jam-patches.jam

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 JAM
字号:
# Copyright 2001, 2002 Dave Abrahams # 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) # Get the recursive Jam invocation codeinclude recursive.jam ;include assert-equal.jam ;Jam "include check-bindrule.jam ;"    : "found: file-to-bind at subdir1$(SLASH)file-to-bind"    ;include check-arguments.jam ;if $(NT){    # if this one fails, you don't have the line length patch    Jam "include test_nt_line_length.jam ;" ;}# a little utility for assertionsrule identity ( list * ){    return $(list) ;}## test rule indirection#rule select ( n list * ){    return $(list[$(n)]) ;}rule indirect1 ( rule + : args * ){    return [ $(rule) $(args) ] ;}assert-equal a : indirect1 select 1 : a b c d e ;assert-equal b : indirect1 select 2 : a b c d e ;x = reset ;rule reset-x ( new-value ){    x = $(new-value) ; }$(x)-x bar ;                       # invokes reset-x...assert-equal bar : identity $(x) ; # which changes x# Check that unmatched subst returns an empty listassert-equal # nothing    : SUBST "abc" "d+" x ;# Check that a matched subst worksassert-equal x    : SUBST "ddd" "d+" x ;    # Check that we can get multiple substitutions from a single invocationassert-equal x y x-y    : SUBST "x/y/z" "([^/]*)/([^/]*).*" "\\1" $2 "\\1-\\2" ;## test local foreach modification#{    local x = 0 ;    local entered = ;    for local x in a b c # x declared local to for loop.    {        entered = 1 ;        if ! ( $(x) in a b c )        {            EXIT "local foreach: expected one of a, b, c; got" $(x) ;        }    }        if $(x) != 0 # if x was modified, it failed to be a local variable    {        EXIT "local foreach failed" ;    }}## test while loops#{    local x = a b c ;    local y = $(x) ;    local z = ;        while $(y)    {        z += $(y[1]) ;        y = $(y[2-]) ;    }        if $(z) != $(x)    {        EXIT "while loops failed" ;    }}## test negative list indices and slices#{    local x = a b c d e ;        rule assert-index ( index : list * )    {        if $(x[$(index)]) != $(list)        {            ECHO with x= $(x) ;            ECHO x[$(index)] == $(x[$(index)]) ;            EXIT expected $(list) ;        }    }        assert-index 1 : a ;    assert-index 3 : c ;    assert-index 1-2 : a b ;    assert-index -1 : e ;    assert-index -2 : d ;    assert-index 2--2 : b c d ;    assert-index -3--2 : c d ;    assert-index 1--2 : a b c d ;    assert-index 1--2 : a b c d ;    assert-index 1--10 : ;    x = a ;    assert-index 1--2 : ;    assert-index 1--2 : ;}## test module primitives#{    local x = a b c d e f g h i j ;    local y = $(x[3-]) ;    rule shift1 ( dummy ) { }    rule my_module.not_really ( ) { return something ; }    # import the identity rule into my_module as "id"    IMPORT  : identity : my_module : id ;    module my_module    {        # assert-equal operates in its own module, so call id in here and use        # identity later.        local f = [ id x y z ] ;        assert-equal x y z : identity $(f) ;                w = ;        y = ;        x2 = 1 2 3 ;        x3 = $(x2) ;        z = $(x2) ;                x3 = ; # should reset x3                # drops one element from the head of x        # moves the first element of z from the head of z to the head of y        rule shift1 ( )        {            x = $(x[2-]) ;            y = $(z[1]) $(y) ;            z = $(z[2-]) ;        }        rule shift2 ( )        {            shift1 ;        }                shift1 ;        shift2 ;        rule get ( symbol )        {            return $($(symbol)) ;        }        local rule not_really ( ) { return nothing ; }    }        local expected = shift1 shift2 get ;    if ! ( $(expected) in [ RULENAMES my_module ] )      || ! ( [ RULENAMES my_module ] in $(expected) )    {        EXIT "[ RULENAMES my_module ] =" [ RULENAMES my_module ] "!=" shift1 shift2 get ;    }                          # show that not_really was actually a local definition    assert-equal something : my_module.not_really ;    if not_really in [ RULENAMES my_module ]    {        EXIT unexpectedly found local rule "not_really" in "my_module" ;    }    EXPORT my_module : not_really ;        if ! ( not_really in [ RULENAMES my_module ] )    {        EXIT unexpectedly failed to find exported rule "not_really" in "my_module" ;    }        # show that my_module doesn't have access to our variables    my_module.shift1 ;    assert-equal $(x[3-]) : identity $(y) ;    # check module locals    assert-equal : my_module.get w ;    assert-equal 3 2 1 : my_module.get y ;    assert-equal 1 2 3 : my_module.get x2 ;    assert-equal : my_module.get x3 ;    assert-equal : my_module.get z ;        my_module.shift2 ;    x = $(x[3-]) ;    assert-equal $(x) : identity $(y) ;    # Prove that the module's rule is not exposed to the world at large without    # qualification    shift1 nothing ;    assert-equal $(x) : identity $(y) ;    # import my_module.shift1 into the global module as "shifty", and    # my_module.shift2 into the global module as "shift2".    IMPORT my_module : shift1 shift2 : : shifty shift2 ;    shifty ;    assert-equal $(x) : identity $(y) ;    shift2 ;    assert-equal $(x) : identity $(y) ;    # Now do the same with localization    IMPORT my_module : shift1 : : shifty : LOCALIZE ;    shifty ;    y = $(y[3-]) ;    assert-equal $(x) : identity $(y) ;    # import everything from my_module into the global module using    # the same names.    IMPORT my_module : [ RULENAMES my_module ] : : [ RULENAMES my_module ] : LOCALIZE ;    shift1 ;    y = $(y[2-]) ;    assert-equal $(x) : identity $(y) ;    shift2 ;    y = $(y[2-]) ;    assert-equal $(x) : identity $(y) ;}## test CALLER_MODULE and backtrace#{    rule backtrace ( )    {        local bt = [ BACKTRACE ] ;        bt = $(bt[5-]) ;        while $(bt)        {            ECHO $(bt[1]):$(bt[2]): "in" $(bt[4]) ;            bt = $(bt[5-]) ;        }    }    module module1    {        rule f ( )        {            local m = [ CALLER_MODULE ] ;            assert-equal : identity $(m) ;            module2.f ;        }    }    module module2    {        rule f ( )        {            local m = [ CALLER_MODULE ] ;            assert-equal module1 : identity $(m) ;            backtrace ;        }    }    module1.f ;}

⌨️ 快捷键说明

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