1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7use Test::RunValgrind (); 8use Path::Tiny qw/ path /; 9 10my $bin_dir = path($0)->parent->absolute; 11my $data_dir = $bin_dir->child('data'); 12 13my $IS_WIN = ( $^O eq "MSWin32" ); 14 15if ($IS_WIN) 16{ 17 plan skip_all => 'valgrind is not available on Windows'; 18} 19else 20{ 21 plan tests => 5; 22} 23 24sub test_using_valgrind 25{ 26 my $args = shift; 27 my $blurb = shift; 28 29 my $log_fn = "valgrind.log"; 30 31 if ( ref($args) eq "ARRAY" ) 32 { 33 $args = { argv => $args, prog => "black-hole-solve", }; 34 } 35 36 my $cmd_line_args = $args->{argv}; 37 my $prog = $args->{prog}; 38 my $success = Test::RunValgrind->new( 39 { 40 supress_stderr => $args->{supress_stderr}, 41 } 42 )->run( 43 { 44 blurb => $blurb, 45 log_fn => $log_fn, 46 prog => $ENV{'FCS_BIN_PATH'} . "/$prog", 47 argv => [ @$cmd_line_args, ], 48 }, 49 ); 50 if (0) 51 { 52 if ( not $success ) 53 { 54 diag( path($log_fn)->slurp_utf8 ); 55 require Carp; 56 Carp::confess("valgrind error"); 57 } 58 } 59 return $success; 60} 61 62# TEST 63test_using_valgrind( 64 [ 65 '--game', 'all_in_a_row', $data_dir->child('24.all_in_a_row.board.txt'), 66 ], 67 qq{valgrind all_in_a_row deal #24.} 68); 69 70# TEST 71test_using_valgrind( 72 [ 73 '--game', 'all_in_a_row', 74 '--display-boards', '--rank-reach-prune', 75 $data_dir->child('24.all_in_a_row.board.txt'), 76 ], 77 qq{valgrind --display-boards --rank-reach-prune all_in_a_row deal #24.} 78); 79 80# TEST 81test_using_valgrind( 82 { 83 argv => [ 84 '--game', 'black_hole', 85 'non-existent-board----------flakmuttterputter.board', 86 ], 87 prog => 'black-hole-solve', 88 supress_stderr => 1, 89 }, 90 qq{valgrind does not crash on non-existent board.} 91); 92 93# TEST 94test_using_valgrind( 95 [ 96 '--game', 'black_hole', '--display-boards', '--rank-reach-prune', 97 $data_dir->child( '26464608654870335080.bh.board.txt', ), 98 ], 99 qq{valgrind --display-boards --rank-reach-prune black_hole deal.} 100); 101 102# TEST 103test_using_valgrind( 104 { 105 prog => './black-hole-solve', 106 argv => [ 107 '--game', 'black_hole', '--iters-display-step', '1100', 108 $data_dir->child("26464608654870335080.bh.board.txt") 109 ], 110 }, 111 qq{valgrind --iters-display-step resume api}, 112); 113