blob: 136ec27cce155870c74b7e90f8fc9d6fe4eb79d8 [file] [log] [blame]
#!/usr/bin/perl -w
# Generate trivial test cases to exercise input types.
use strict;
# deliberately non-exhaustive
my @basicTypes = ("half", "float", # "double",
"char", "short", # "int", "long",
"uchar", "ushort", # "uint", "ulong",
"bool",
"rs_matrix2x2", # "rs_matrix3x3", "rs_matrix4x4",
"MyStruct");
# 1 signifies non-vector
# 3 is not supported for exported types
my @vecLengths = (1, 2, 4);
sub isVectorEligible {
my ($type) = @_;
# There are no bool vectors or struct vectors
return 0 if ($type eq "bool") || ($type eq "MyStruct");
# There are no matrix or object vectors
return 0 if (substr($type, 0, 3) eq "rs_");
# Else ok
return 1;
}
print "// -Wall -Werror\n";
print "#pragma version(1)\n";
print "#pragma rs java_package_name(inputs)\n\n";
print "// This test case was created by $0.\n";
print "// It exercises various legal combinations of inputs and special parameters,\n";
print "// so that we can ensure\n";
print "// (a) We do not choke when compiling them\n";
print "// (b) We reflect them correctly\n\n";
print "// One example struct type\n";
print "typedef struct MyStruct { float f; double d; } MyStruct;\n\n";
print "// Trivial combiner shared by all test cases\n";
print "static void combiner(int *accum, const int *other) { }\n";
foreach my $basicTypeA (@basicTypes) {
foreach my $vecLenA (@vecLengths) {
next if ($vecLenA > 1) && !isVectorEligible($basicTypeA);
my $eltNameA = $basicTypeA;
$eltNameA .= $vecLenA if ($vecLenA > 1);
foreach my $basicTypeB (@basicTypes) {
foreach my $vecLenB (@vecLengths) {
next if ($vecLenB > 1) && !isVectorEligible($basicTypeB);
my $eltNameB = $basicTypeB;
$eltNameB .= $vecLenB if ($vecLenB > 1);
for (my $hasSpecial = 0; $hasSpecial <= 1; ++$hasSpecial) {
my $reduceName = "my_${eltNameA}_${eltNameB}_${hasSpecial}";
my $accumName = "${reduceName}_accum";
print "\n";
print "#pragma rs reduce(${reduceName}) accumulator(${accumName}) combiner(combiner)\n";
print "static void ${accumName}(int *accum, ${eltNameA} a, ${eltNameB} b";
print ", rs_kernel_context context" if ($hasSpecial);
print ") { }\n";
}
}
}
}
}