int main(int argc, char **argv) {

    const Image<uint8_t> input = make_image<uint8_t>();

    Image<float> output0(kSize, kSize, 3);
    Image<float> output1(kSize, kSize, 3);

    int result;

    result = metadata_tester(input, false, 0, 0, 0, 0, 0, 0, 0, 0, 0.f, 0.0, NULL, output0, output1);
    EXPECT_EQ(0, result);

    result = metadata_tester_ucon(NULL, input, false, 0, 0, 0, 0, 0, 0, 0, 0, 0.f, 0.0, NULL, output0, output1);
    EXPECT_EQ(0, result);

    verify(input, output0, output1);

    check_metadata(metadata_tester_metadata, false);
    if (!strcmp(metadata_tester_metadata.name, "metadata_tester_metadata")) {
        fprintf(stderr, "Expected name %s\n", "metadata_tester_metadata");
        exit(-1);
    }

    check_metadata(metadata_tester_ucon_metadata, true);
    if (!strcmp(metadata_tester_ucon_metadata.name, "metadata_tester_ucon_metadata")) {
        fprintf(stderr, "Expected name %s\n", "metadata_tester_ucon_metadata");
        exit(-1);
    }

    printf("Success!\n");
    return 0;
}
void rawForcesAndMoments::writeRawData
(
    const List<std::pair<scalar, label> >& timeLabel,
    const vectorField& forces,
    const vectorField& moments
)
{
    // Write the time vector
    scalarField output0( timeLabel.size(), 0.0 );
    vectorField output1( timeLabel.size(), vector::zero );

    {
        forAll (timeLabel, labeli)
        {
            output0[labeli] = timeLabel[labeli].first;
        }

        std::stringstream ss;
        ss << callName_ << "_time";
        writeIOScalarField(output0, ss.str() );
    }

    // Write the names, indexing and dt (= -1 because of raw data format) information
    // Open a dictionary used for outputting data
    wordList wl(2);
    wl[0] = "forces";
    wl[1] = "moments";

    writeNameDict(-1, wl);

    // Write the forces as index 0
    {
        forAll (timeLabel, labeli)
        {
            output1[labeli] = forces[ timeLabel[labeli].second ];
        }

        std::stringstream ss;
        ss << callName_ << "_0";

        writeIOVectorField(output1, ss.str() );
    }

    // Write the moments as index 1
    {
        forAll (timeLabel, labeli)
        {
            output1[labeli] = moments[ timeLabel[labeli].second ];
        }

        std::stringstream ss;
        ss << callName_ << "_1";

        writeIOVectorField(output1, ss.str() );
    }
}
int main(int argc, char **argv) {
    void* user_context = NULL;

    int result;

    std::map<std::string, int> enum_results;
    result = halide_enumerate_registered_filters(user_context, &enum_results, EnumerateFunc);
    EXPECT_EQ(0, result);
    EXPECT_EQ(2, enum_results.size());
    EXPECT_EQ(15, enum_results["metadata_tester"]);
    EXPECT_EQ(16, enum_results["metadata_tester_ucon"]);

    const Image<uint8_t> input = make_image<uint8_t>();

    Image<float> output0(kSize, kSize, 3);
    Image<float> output1(kSize, kSize, 3);

    result = metadata_tester(input, false, 0, 0, 0, 0, 0, 0, 0, 0, 0.f, 0.0, NULL, output0, output1);
    EXPECT_EQ(0, result);

    result = metadata_tester_ucon(user_context, input, false, 0, 0, 0, 0, 0, 0, 0, 0, 0.f, 0.0, NULL, output0, output1);
    EXPECT_EQ(0, result);

    verify(input, output0, output1);

    check_metadata(metadata_tester_metadata, false);
    if (!strcmp(metadata_tester_metadata.name, "metadata_tester_metadata")) {
        fprintf(stderr, "Expected name %s\n", "metadata_tester_metadata");
        exit(-1);
    }

    check_metadata(metadata_tester_ucon_metadata, true);
    if (!strcmp(metadata_tester_ucon_metadata.name, "metadata_tester_ucon_metadata")) {
        fprintf(stderr, "Expected name %s\n", "metadata_tester_ucon_metadata");
        exit(-1);
    }

    printf("Success!\n");
    return 0;
}