The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!/usr/bin/perl
# 12-randfile.t
# Copyright (c) 2006 Rockway <jrockway@cpan.org>
# Copyright (c) 2006 Al Tobey <tobeya@cpan.org>
eval "use String::Random";
plan skip_all => "Requires String::Random" if $@;
plan tests => 109;
# I run local tests of 512 or more to exhaust the chances entropy is causing
# tests to pass that might fail on client machines
# 20 should suffice for clients downloading from CPAN
my $loop_iterations = 20;
my $temp = Directory::Scratch->new;
ok( my $rfile = $temp->randfile, "randfile()" );
ok( length($rfile), "randfile() returned a string" );
ok( -e $rfile, "file exists" );
ok( unlink($rfile), "file unlink() succeeds" );
$rfile = undef;
sub test_iterations {
for my $i (1..$loop_iterations) {
ok( $rfile = $temp->randfile( 1024, 2048 ), "$i: randfile( 1024, 2048 )" );
my $size = -s $rfile;
ok( -e $rfile, " $i: File exists." );
cmp_ok( $size, '>=', 1024, " $i: size of file: $size > 1024" );
cmp_ok( $size, '<=', 2048, " $i: size of file: $size < 2048" );
}
}
test_iterations();
my $j = 1;
for ( my $i=1; $i<=1000000; $i *= 10 ) {
ok( my $file = $temp->randfile($j, $i), "randfile($j, $i)" );
my $size = -s $file;
if ( $size <= $i && $size >= $j ) {
pass( " check file size" );
}
else {
fail( " check file size ( $size <= $i && $size >= $j )" );
}
$j = $i;
unlink $file;
}
for ( my $i=1; $i<=1024; $i *= 2 ) {
ok( my $file = $temp->randfile($i), "randfile($i)" );
}