/*
* Copyright 2013-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.util.unit;
import static org.junit.Assert.assertEquals;
import com.facebook.buck.model.Pair;
import org.junit.Test;
public class SizeUnitTest {
private static final double delta = 0.0001;
@Test(expected = NumberFormatException.class)
public void testInvalidParseBytes() {
SizeUnit.parseBytes("foobar");
}
@Test
public void testParseBytes() {
assertEquals(Long.MAX_VALUE, SizeUnit.parseBytes(Long.toString(Long.MAX_VALUE) + "00 B"));
assertEquals(0L, SizeUnit.parseBytes("0GB"));
assertEquals(123L, SizeUnit.parseBytes("123 B"));
assertEquals(123L, SizeUnit.parseBytes("123 Bytes"));
assertEquals(1024L, SizeUnit.parseBytes("1 kb"));
assertEquals(1536L, SizeUnit.parseBytes("1.5 kb"));
assertEquals(1024L, SizeUnit.parseBytes("1 kilobytes"));
assertEquals(10L * 1024L * 1024L, SizeUnit.parseBytes("10 mb"));
assertEquals(2L * 1024L * 1024L, SizeUnit.parseBytes("2 megabytes"));
assertEquals(10L * 1024L * 1024L * 1024L, SizeUnit.parseBytes("10 gb"));
assertEquals(2L * 1024L * 1024L * 1024L, SizeUnit.parseBytes("2 gigabytes"));
assertEquals(10L * 1024L * 1024L * 1024L * 1024L, SizeUnit.parseBytes("10 tb"));
assertEquals(42L * 1024L * 1024L * 1024L * 1024L, SizeUnit.parseBytes("42 terabytes"));
}
@Test
public void testBytes() {
assertEquals(4L, SizeUnit.BYTES.toBytes(4L));
assertEquals(0L, SizeUnit.BYTES.toKilobytes(4L));
assertEquals(2L, SizeUnit.BYTES.toKilobytes(2048L));
assertEquals(10L, SizeUnit.BYTES.toMegabytes(10L * 1024L * 1024L));
assertEquals(10L, SizeUnit.BYTES.toGigabytes(10L * 1024L * 1024L * 1024L));
assertEquals(10L, SizeUnit.BYTES.toTerabytes(10L * 1024L * 1024L * 1024L * 1024L));
}
@Test
public void testKilobytes() {
assertEquals(2048L, SizeUnit.KILOBYTES.toBytes(2L));
assertEquals(2048L, SizeUnit.KILOBYTES.toKilobytes(2048L));
assertEquals(0L, SizeUnit.KILOBYTES.toMegabytes(4L));
assertEquals(10L, SizeUnit.KILOBYTES.toMegabytes(10L * 1024L));
assertEquals(10L, SizeUnit.KILOBYTES.toGigabytes(10L * 1024L * 1024L));
assertEquals(10L, SizeUnit.KILOBYTES.toTerabytes(10L * 1024L * 1024L * 1024L));
}
@Test
public void testMegabytes() {
assertEquals(1024L * 1024L, SizeUnit.MEGABYTES.toBytes(1L));
assertEquals(2048L, SizeUnit.MEGABYTES.toKilobytes(2L));
assertEquals(42L, SizeUnit.MEGABYTES.toMegabytes(42L));
assertEquals(0L, SizeUnit.MEGABYTES.toGigabytes(4L));
assertEquals(10L, SizeUnit.MEGABYTES.toGigabytes(10L * 1024L));
assertEquals(10L, SizeUnit.MEGABYTES.toTerabytes(10L * 1024L * 1024L));
}
@Test
public void testGigabytes() {
assertEquals(1024L * 1024L * 1024L, SizeUnit.GIGABYTES.toBytes(1L));
assertEquals(2 * 1024L * 1024L, SizeUnit.GIGABYTES.toKilobytes(2L));
assertEquals(2048L, SizeUnit.GIGABYTES.toMegabytes(2L));
assertEquals(42L, SizeUnit.GIGABYTES.toGigabytes(42L));
assertEquals(0L, SizeUnit.GIGABYTES.toTerabytes(4L));
assertEquals(10L, SizeUnit.GIGABYTES.toTerabytes(10L * 1024L));
}
@Test
public void testTerabytes() {
assertEquals(1024L * 1024L * 1024L * 1024L, SizeUnit.TERABYTES.toBytes(1L));
assertEquals(2 * 1024L * 1024L * 1024L, SizeUnit.TERABYTES.toKilobytes(2L));
assertEquals(2L * 1024L * 1024L, SizeUnit.TERABYTES.toMegabytes(2L));
assertEquals(2048L, SizeUnit.TERABYTES.toGigabytes(2L));
assertEquals(42L, SizeUnit.TERABYTES.toTerabytes(42L));
}
@Test
public void testHumanReadableByteConversion() {
Pair<Double, SizeUnit> result = SizeUnit.getHumanReadableSize(1, SizeUnit.BYTES);
assertEquals(1.0, result.getFirst(), delta);
assertEquals(SizeUnit.BYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(0, SizeUnit.BYTES);
assertEquals(0.0, result.getFirst(), delta);
assertEquals(SizeUnit.BYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(1024, SizeUnit.BYTES);
assertEquals(1024.0, result.getFirst(), delta);
assertEquals(SizeUnit.BYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(1024 * 5, SizeUnit.BYTES);
assertEquals(5.0, result.getFirst(), delta);
assertEquals(SizeUnit.KILOBYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(1024 * 1025, SizeUnit.BYTES);
assertEquals(1.0009765625, result.getFirst(), delta);
assertEquals(SizeUnit.MEGABYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(1024 * 1024, SizeUnit.BYTES);
assertEquals(1024.0, result.getFirst(), delta);
assertEquals(SizeUnit.KILOBYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(1024 * 1024 * 1025, SizeUnit.GIGABYTES);
assertEquals(1024 * 1025.0, result.getFirst(), delta);
assertEquals(SizeUnit.TERABYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(0.01, SizeUnit.TERABYTES);
assertEquals(10.24, result.getFirst(), delta);
assertEquals(SizeUnit.GIGABYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(0.00000000001, SizeUnit.TERABYTES);
assertEquals(10.99511627776, result.getFirst(), delta);
assertEquals(SizeUnit.BYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(0.01, SizeUnit.MEGABYTES);
assertEquals(10.24, result.getFirst(), delta);
assertEquals(SizeUnit.KILOBYTES, result.getSecond());
result = SizeUnit.getHumanReadableSize(0.01, SizeUnit.BYTES);
assertEquals(0.01, result.getFirst(), delta);
assertEquals(SizeUnit.BYTES, result.getSecond());
}
}