FloatParsingTest.java

package com.fasterxml.jackson.core.read;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.core.*;

import static org.junit.jupiter.api.Assertions.assertEquals;

// for [core#755]
class FloatParsingTest extends JUnit5TestBase
{
    private final byte[] FLOATS_DOC = readResource("/data/floats-755.json");

    @Test
    void floatArrayViaInputStream() throws Exception
    {
        _testFloatArray(MODE_INPUT_STREAM, false);
        _testFloatArray(MODE_INPUT_STREAM_THROTTLED, false);
    }

    @Test
    void floatArrayViaInputStreamWithFastParser() throws Exception
    {
        _testFloatArray(MODE_INPUT_STREAM, true);
        _testFloatArray(MODE_INPUT_STREAM_THROTTLED, true);
    }

    @Test
    void floatArrayViaReader() throws Exception {
        _testFloatArray(MODE_READER, false);
    }

    @Test
    void floatArrayViaReaderWithFastParser() throws Exception {
        _testFloatArray(MODE_READER, true);
    }

    @Test
    void floatArrayViaDataInput() throws Exception {
       _testFloatArray(MODE_DATA_INPUT, false);
    }

    @Test
    void floatArrayViaDataInputWithFasrtParser() throws Exception {
        _testFloatArray(MODE_DATA_INPUT, true);
    }

    private void _testFloatArray(int mode, boolean useFastParser) throws Exception
    {
        // construct new instance to reduce buffer recycling etc:
        TokenStreamFactory jsonF = newStreamFactory();

        JsonParser p = createParser(jsonF, mode, FLOATS_DOC);
        if (useFastParser) {
            p.enable(JsonParser.Feature.USE_FAST_DOUBLE_PARSER);
        }

        assertToken(JsonToken.START_ARRAY, p.nextToken());

        assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
        assertEquals(7.038531e-26f, p.getFloatValue());

        assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
        assertEquals(1.199999988079071f, p.getFloatValue());

        assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
        assertEquals(3.4028235677973366e38f, p.getFloatValue());

        assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
        assertEquals(7.006492321624086e-46f, p.getFloatValue());

        assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());

        p.close();
    }
}