import pytest

import free_disk


@pytest.mark.parametrize(
    ("data_size_with_unit", "expected_bytes"),
    [
        ("123", 123),
        ("123B", 123),
        ("123.0B", 123),
        ("1kB", 1000),
        ("2kB", 2000),
        ("2.5kB", 2500),
        ("2KB", 2000),
        ("8MB", 8 * (10 ** 6)),
        ("8.5MB", 8.5 * (10 ** 6)),
        ("32GB", 32 * (10 ** 9)),
        ("9TB", 9 * (10 ** 12)),
        ("3KiB", 3 * (1024 ** 1)),
        ("40MiB", 40 * (1024 ** 2)),
        ("512GiB", 512 * (1024 ** 3)),
        ("7TiB", 7 * (1024 ** 4)),
        ("123 B", 123),
        ("123\tB", 123),
        ("123.0  B", 123),
        ("1  kB", 1000),
        ("1  MiB", 1024 ** 2),
    ],
)
def test_data_size_to_bytes(data_size_with_unit, expected_bytes):
    assert expected_bytes == free_disk.data_size_to_bytes(data_size_with_unit)


@pytest.mark.parametrize("data_size_with_unit", ["abcdef", "123G",])
def test_data_size_to_bytes_fail(data_size_with_unit):
    with pytest.raises(ValueError):
        free_disk.data_size_to_bytes(data_size_with_unit)