isp0int.mjs

import isint from './isint.mjs'
import cint from './cint.mjs'


/**
 * 判斷是否為大於等於0整數(非負整數)
 * 非負整數包含0
 *
 * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/isp0int.test.mjs Github}
 * @memberOf wsemi
 * @param {*} v 輸入任意資料
 * @param {Object} [opt={}] 輸入設定物件,預設{}
 * @param {Boolean} [opt.useLimitSafe=false] 輸入是否限制須為安全整數布林值,原樣傳遞給isint,若為true則超出安全整數範圍者(即Number.isSafeInteger為false,含Infinity、-Infinity與絕對值大於Number.MAX_SAFE_INTEGER者)判定為false,預設false
 * @returns {Boolean} 回傳判斷布林值
 * @example
 *
 * console.log(isp0int(0))
 * // => true
 *
 * console.log(isp0int('0'))
 * // => true
 *
 * console.log(isp0int(125))
 * // => true
 *
 * console.log(isp0int(1.25))
 * // => false
 *
 * console.log(isp0int('125'))
 * // => true
 *
 * console.log(isp0int('1.25'))
 * // => false

 * console.log(isp0int(-125))
 * // => false
 *
 * console.log(isp0int(-1.25))
 * // => false
 *
 * console.log(isp0int('-125'))
 * // => false
 *
 * console.log(isp0int('-1.25'))
 * // => false
 *
 */
function isp0int(v, opt = {}) {

    //check, opt原樣傳遞, 安全整數之判定統一由isint負責, 不於此重複實作
    if (!isint(v, opt)) {
        return false
    }

    //cint無須傳入opt, 因已通過isint之檢查, 此處v必為安全整數, cint不會有超出安全整數範圍之情形
    let r = cint(v) >= 0

    return r
}


export default isp0int