File: queue-fuzz-test.pl

package info (click to toggle)
freecell-solver 3.26.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 4,864 kB
  • ctags: 3,658
  • sloc: ansic: 34,721; perl: 12,320; xml: 5,999; python: 1,149; sh: 965; ruby: 347; cpp: 304; makefile: 151
file content (86 lines) | stat: -rw-r--r-- 1,787 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl

use strict;
use warnings;

use lib './t/t/lib';

package RandGen;

use base 'Games::ABC_Path::MicrosoftRand';

sub rand30
{
    my $self = shift;

    my $one = $self->rand;
    my $two = $self->rand;

    return ($one | ($two << 15));
}

package main;


use File::Spec;
use File::Path qw( mkpath );

use Data::Dump qw(dd);

use Games::Solitaire::FC_Solve::QueuePrototype;
use Games::Solitaire::FC_Solve::QueueInC;

my ($items_per_page, $data_seed, $interval_seed) = @ARGV;

my $input_gen =  RandGen->new(seed => $data_seed);
my $output_gen = RandGen->new(seed => $data_seed);
my $interval_gen = RandGen->new(seed => $interval_seed);

my $queue_offload_dir_path = File::Spec->catdir(
    $ENV{TMPDIR}, "queue-offload-dir"
);
mkpath($queue_offload_dir_path);

my $class = $ENV{'USE_C'} ? 'Games::Solitaire::FC_Solve::QueueInC' :
    'Games::Solitaire::FC_Solve::QueuePrototype';

my $queue = $class->new(
    {
        num_items_per_page => $items_per_page,
        offload_dir_path => $queue_offload_dir_path,
    }
);

while ($queue->get_num_extracted() < 10_000_000)
{
    # Insert some items.
    {
        my $interval = $interval_gen->rand30() % 1_000;

        foreach my $idx (1 .. $interval)
        {
            $queue->insert($input_gen->rand30());
        }
    }

    {
        my $interval = $interval_gen->rand30() % 1_000;

        foreach my $idx (1 .. $interval)
        {
            if (! $queue->get_num_items_in_queue())
            {
                last;
            }
            if ($queue->extract() != $output_gen->rand30())
            {
                print "Problem occured.";
                dd($queue);
                die "Error";
            }
        }
    }
    print "Checkpoint." . $queue->get_num_extracted() . "\n";
}

exit(0);