# Check valids()s in opencl and cuda formats # Copyright (C) 2013, 2015 Alexander Cherepanov # # Redistribution and use in source and binary forms, with or without # modification, are permitted. # Run as: # (cd jumbo/src/; perl -C0 ../../compare_valids.pl *.[ch]) | sort -t: -k2 use strict; use warnings; undef $/; mkdir "valids"; my %valid; # valids by file my %files; # files by valid for my $file (@ARGV) { open IN, '<', $file; $_ = ; if (/(static\s+)?int\s+\w*valid\s*\([^()]+\)\s*\{.*?^\}/sm) { # save valid() definition in a file open OUT, '>', "valids/$file"; print OUT "$&\n"; close OUT; # remember it $valid{$file} = $&; push @{$files{$&}}, $file; } close IN; } for my $file (sort keys %valid) { if ($file =~ /^(opencl|cuda)_(.*)/) { my $base = $2; if (!defined $valid{$base}) { if ($#{$files{$valid{$file}}} == 0) { print "$file: Bad -- no valid() in base file, unique valid()\n"; } else { print "$file: Bad -- no valid() in base file, the same valid() in ", join ', ', sort grep { $_ ne $file } @{$files{$valid{$file}}}; print "\n"; } } elsif ($valid{$file} ne $valid{$base}) { print "$file: Bad -- diff base valid()\n"; } else { print "$file: Good -- same base valid()\n"; } } }