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"; } } } } }