Func-Util

 view release on metacpan or  search on metacpan

t/003-util-predicates-valid.t  view on Meta::CPAN

    ok(!is_string({}), 'is_string: hash');
    ok(!is_string(sub {}), 'is_string: code');
    ok(!is_string(\my $x), 'is_string: scalar ref');

    # Strings (defined non-refs)
    ok(is_string(''), 'is_string: empty string');
    ok(is_string('hello'), 'is_string: string');
    ok(is_string(0), 'is_string: 0');
    ok(is_string(42), 'is_string: integer');
    ok(is_string(3.14), 'is_string: float');
    ok(is_string('0'), 'is_string: string 0');
};

subtest 'is_string edge cases' => sub {
    # Stringified number
    my $num = 42;
    my $str = "$num";
    ok(is_string($str), 'is_string: stringified number');

    # Blessed reference is not a string
    my $obj = bless {}, 'Class';
    ok(!is_string($obj), 'is_string: blessed ref');

    # Large number
    ok(is_string(1e100), 'is_string: large number');

    # Negative
    ok(is_string(-42), 'is_string: negative');
};

# ============================================
# is_num
# ============================================

subtest 'is_num basic' => sub {
    # Not numbers
    ok(!is_num(undef), 'is_num: undef');
    ok(!is_num('hello'), 'is_num: non-numeric string');
    ok(!is_num(''), 'is_num: empty string');
    ok(!is_num([]), 'is_num: array');
    ok(!is_num({}), 'is_num: hash');

    # Numbers
    ok(is_num(0), 'is_num: 0');
    ok(is_num(42), 'is_num: positive int');
    ok(is_num(-42), 'is_num: negative int');
    ok(is_num(3.14), 'is_num: float');
    ok(is_num(-3.14), 'is_num: negative float');
    ok(is_num(1e10), 'is_num: scientific notation');
};

subtest 'is_num edge cases' => sub {
    # String that looks like number
    ok(is_num('42'), 'is_num: string 42');
    ok(is_num('3.14'), 'is_num: string 3.14');
    ok(is_num('-5'), 'is_num: string -5');
    ok(is_num('1e10'), 'is_num: string scientific');

    # Special values (Perl's looks_like_number considers these numeric)
    ok(is_num(0.0), 'is_num: 0.0');
    ok(is_num('NaN'), 'is_num: string NaN (Perl considers numeric)');
    ok(is_num('inf'), 'is_num: string inf (Perl considers numeric)');

    # Whitespace (Perl's looks_like_number accepts leading/trailing spaces)
    ok(is_num('  42  '), 'is_num: number with spaces (Perl accepts)');
    ok(!is_num('42abc'), 'is_num: number with trailing text');
};

# ============================================
# is_int
# ============================================

subtest 'is_int basic' => sub {
    # Not integers
    ok(!is_int(undef), 'is_int: undef');
    ok(!is_int('hello'), 'is_int: string');
    ok(!is_int(3.14), 'is_int: float');
    ok(!is_int(-3.14), 'is_int: negative float');
    ok(!is_int([]), 'is_int: array');

    # Integers
    ok(is_int(0), 'is_int: 0');
    ok(is_int(42), 'is_int: positive');
    ok(is_int(-42), 'is_int: negative');
    ok(is_int(1000000), 'is_int: large');
};

subtest 'is_int edge cases' => sub {
    # Whole number floats
    ok(is_int(5.0), 'is_int: 5.0');
    ok(is_int(-10.0), 'is_int: -10.0');

    # Very close to integer
    ok(!is_int(5.0001), 'is_int: 5.0001');
    ok(!is_int(4.9999), 'is_int: 4.9999');

    # String integers
    ok(is_int('42'), 'is_int: string 42');
    ok(is_int('-5'), 'is_int: string -5');
};

# ============================================
# is_blessed
# ============================================

subtest 'is_blessed basic' => sub {
    # Not blessed
    ok(!is_blessed(undef), 'is_blessed: undef');
    ok(!is_blessed(42), 'is_blessed: number');
    ok(!is_blessed('string'), 'is_blessed: string');
    ok(!is_blessed([]), 'is_blessed: unblessed array');
    ok(!is_blessed({}), 'is_blessed: unblessed hash');
    ok(!is_blessed(sub {}), 'is_blessed: unblessed code');

    # Blessed
    my $obj = bless {}, 'MyClass';
    ok(is_blessed($obj), 'is_blessed: blessed hash');

    my $arr = bless [], 'MyArray';
    ok(is_blessed($arr), 'is_blessed: blessed array');



( run in 1.497 second using v1.01-cache-2.11-cpan-39bf76dae61 )