package perf;

import java.io.File;
import java.util.*;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;

/* Test modified from json-parsers-benchmark, to be able to profile
 * Jackson implementation.
 */
public class ManualWritePerfUntyped
    extends ObjectWriterTestBase<Object,Object>
{
    @Override
    protected int targetSizeMegs() { return 15; }

    public static void main(String[] args) throws Exception
    {
        if (args.length != 1) {
            System.err.println("Usage: java [input]");
            System.exit(1);
        }
        ObjectMapper mapper = new ObjectMapper();
        Map<?,?> stuff = mapper.readValue(new File(args[0]), Map.class);
        new ManualWritePerfUntyped().test(mapper,
                "Untyped-1", stuff, Object.class,
                "Untyped-2", stuff, Object.class);
    }

    @SuppressWarnings("resource")
    @Override
    protected double testSer(int REPS, Object value, ObjectWriter writer) throws Exception
    {
        long start = System.nanoTime();

        // As Bytes
        /*
//        byte[] output = null;
        NopOutputStream out = new NopOutputStream();
        while (--REPS >= 0) {
//            output = writer.writeValueAsBytes(value);
            writer.writeValue(out, value);
        }
        long nanos = System.nanoTime() - start;
        hash = out.size;
        out.close();
        */

        // As String

//        String output = null;
        NopWriter w = new NopWriter();
        while (--REPS >= 0) {
//            output = writer.writeValueAsString(value);
            writer.writeValue(w, value);
        }
        long nanos = System.nanoTime() - start;
//        hash = output.length();
        hash = w.size();

        return _msecsFromNanos(nanos);
    }
}
