From 731208d1aef2d3fb107b9f4fbfc4a733f8569841 Mon Sep 17 00:00:00 2001 From: jonmv Date: Tue, 25 Oct 2022 11:46:47 +0200 Subject: Add IntegerCompressor.compressionMode --- .../src/main/java/com/yahoo/compress/IntegerCompressor.java | 8 ++++++++ .../test/java/com/yahoo/compress/IntegerCompressorTest.java | 13 +++++++++++++ 2 files changed, 21 insertions(+) (limited to 'vespajlib') diff --git a/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java b/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java index fada7243b95..42178fa3ffd 100644 --- a/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java +++ b/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java @@ -10,6 +10,14 @@ import java.nio.ByteBuffer; */ public class IntegerCompressor { + public enum Mode { NONE, COMPRESSED, COMPRESSED_POSITIVE; } + + public static Mode compressionMode(int min, int max) { + if (min >= 0 && max < 1 << 30) return Mode.COMPRESSED_POSITIVE; + if (min > -1 << 29 && max < 1 << 29) return Mode.COMPRESSED; + return Mode.NONE; + } + public static void putCompressedNumber(int n, ByteBuffer buf) { int negative = n < 0 ? 0x80 : 0x0; if (negative != 0) { diff --git a/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java b/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java index 921ae6746be..c53a834659c 100644 --- a/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java +++ b/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.compress; +import com.yahoo.compress.IntegerCompressor.Mode; import org.junit.Test; import java.nio.ByteBuffer; @@ -91,6 +92,18 @@ public class IntegerCompressorTest { assertThrows(IllegalArgumentException.class, () -> verifyNumber(-0x80000000, mx80000000)).getMessage()); } + @Test + public void testMode() { + assertEquals(Mode.NONE, IntegerCompressor.compressionMode(-0x80000000, 0x00000000)); + assertEquals(Mode.NONE, IntegerCompressor.compressionMode(-0x20000000, 0x00000000)); + assertEquals(Mode.NONE, IntegerCompressor.compressionMode(-0x00000001, 0x3fffffff)); + assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x1fffffff, 0x1fffffff)); + assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x1fffffff, -0x1fffffff)); + assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x1fffffff, 0x00000000)); + assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x00000001, 0x1fffffff)); + assertEquals(Mode.COMPRESSED_POSITIVE, IntegerCompressor.compressionMode( 0x00000000, 0x00000000)); + assertEquals(Mode.COMPRESSED_POSITIVE, IntegerCompressor.compressionMode( 0x00000000, 0x3fffffff)); + assertEquals(Mode.COMPRESSED_POSITIVE, IntegerCompressor.compressionMode( 0x3fffffff, 0x3fffffff)); } } -- cgit v1.2.3