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

📄 numbers.jam

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 JAM
字号:
# Copyright 2001, 2002 Dave Abrahams# 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 ;rule trim-leading-zeroes ( value ){    return [ CALC $(value) + 0 ] ;}rule check ( numbers * ){    for local n in $(numbers)    {        switch $(n)        {            case *[^0-9]* :                errors.error $(n) "in" $(numbers) : is not a number ;        }    }}rule increment ( number ){    return [ CALC $(number) + 1 ] ;}rule decrement ( number ){    return [ CALC $(number) - 1 ] ;}rule range ( start finish ? : step ? ){    if ! $(finish)    {        finish = $(start) ;        start = 1 ;    }    step ?= 1 ;    check $(start) $(finish) $(step) ;    if $(finish) != 0    {        local result ;        while [ less $(start) $(finish) ] || $(start) = $(finish)        {            result += $(start) ;            start = [ CALC $(start) + $(step) ] ;        }        return $(result) ;    }}rule less ( n1 n2 ){    switch [ CALC $(n2) - $(n1) ]    {        case [1-9]* : return true ;    }}rule log10 ( number ){    switch $(number)    {        case *[^0-9]* : errors.error $(number) is not a number ;        case 0 : errors.error can't take log of zero ;        case [1-9] : return 0 ;        case [1-9]? : return 1 ;        case [1-9]?? : return 2 ;        case [1-9]??? : return 3 ;        case [1-9]???? : return 4 ;        case [1-9]????? : return 5 ;        case [1-9]?????? : return 6 ;        case [1-9]??????? : return 7 ;        case [1-9]???????? : return 8 ;        case [1-9]????????? : return 9 ;        case * :        {            import sequence ;            import string ;            local chars = [ string.chars $(number) ] ;            while $(chars[1]) = 0            {                chars = $(chars[2-]) ;            }            if ! $(chars)            {                errors.error can't take log of zero ;            }            else            {                return [ decrement [ sequence.length $(chars) ] ] ;            }        }    }}rule __test__ ( ){    import assert ;    assert.result 1 : increment 0 ;    assert.result 2 : increment 1 ;    assert.result 1 : decrement 2 ;    assert.result 0 : decrement 1 ;    assert.result 50 : increment 49 ;    assert.result 49 : decrement 50 ;    assert.result 99 : increment 98 ;    assert.result 99 : decrement 100 ;    assert.result 100 : increment 99 ;    assert.result 999 : decrement 1000 ;    assert.result 1000 : increment 999 ;    assert.result 1 2 3 : range 3 ;    assert.result 1 2 3 4 5 6 7 8 9 10 11 12 : range 12 ;    assert.result 3 4 5 6 7 8 9 10 11 : range 3 11 ;    assert.result : range 0 ;    assert.result 1 4 7 10 : range 10 : 3 ;    assert.result 2 4 6 8 10 : range 2 10 : 2 ;    assert.result 25 50 75 100 : range 25 100 : 25 ;    assert.result 0           : trim-leading-zeroes 0           ;    assert.result 1234        : trim-leading-zeroes 1234        ;    assert.result 123456      : trim-leading-zeroes 0000123456  ;    assert.result 1000123456  : trim-leading-zeroes 1000123456  ;    assert.result 10000       : trim-leading-zeroes 10000       ;    assert.result 10000       : trim-leading-zeroes 00010000    ;    assert.true  less 1 2 ;    assert.true  less 1 12 ;    assert.true  less 1 21 ;    assert.true  less 005 217 ;    assert.false less 0 0 ;    assert.false less 03 3 ;    assert.false less 3 03 ;    assert.true  less 005 217 ;    assert.true  less 0005 217 ;    assert.true  less 5 00217 ;    # TEMPORARY disabled, because nested "try"/"catch" do not work and I do no    # have the time to fix that right now.    if $(0)    {    try ;    {        decrement 0 ;    }    catch can't decrement zero! ;    try ;    {        check foo ;    }    catch : not a number ;    try ;    {        increment foo ;    }    catch : not a number ;    try ;    {        log10 0 ;    }    catch can't take log of zero ;    try ;    {        log10 000 ;    }    catch can't take log of zero ;    }    assert.result 0 : log10 1 ;    assert.result 0 : log10 9 ;    assert.result 1 : log10 10 ;    assert.result 1 : log10 99 ;    assert.result 2 : log10 100 ;    assert.result 2 : log10 101 ;    assert.result 2 : log10 125 ;    assert.result 2 : log10 999 ;    assert.result 3 : log10 1000 ;    assert.result 10 : log10 12345678901 ;    for local x in [ range 75 110 : 5 ]    {        for local y in [ range $(x) 111 : 3 ]        {            if $(x) != $(y)            {                assert.true less $(x) $(y) ;            }        }    }    for local x in [ range 90 110 : 2 ]    {        for local y in [ range 80 $(x) : 4 ]        {            assert.false less $(x) $(y) ;        }    }}

⌨️ 快捷键说明

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