예제 #1
0
def test_constructing_full_graph():
    """Tests constructing full graph"""
    unit_graph = UnitGraph("Distance")
    unit_graph.add_unit("m", "meter", "m")
    unit_graph.add_unit("cm", "centimeter", "cm")
    unit_graph.add_unit("mm", "millimeter", "mm")
    unit_graph.add_conversion("m", "cm", 100)
    unit_graph.add_conversion("m", "mm", 1000)
    assert unit_graph.has_edge("cm", "mm") is False
    unit_graph.construct_full_graph()
    assert unit_graph["cm"]["mm"]["weight"] == 10
예제 #2
0
def test_get_multiplier():
    """Test get multiplier"""
    unit_graph = UnitGraph("length")
    unit_graph.add_unit("m", "meter", "m")
    unit_graph.add_unit("cm", "centimeter", "cm")
    unit_graph.add_unit("mm", "millimeter", "mm")
    unit_graph.add_conversion("m", "mm", 1000)
    unit_graph.add_conversion("m", "cm", 100)

    convertor_dictionary = {}
    convertor_dictionary["length"] = unit_graph

    unit_convertor = UnitConvertor(convertor_dictionary)

    assert unit_convertor.get_multiplier("cm", "m")[2] == 0.01
    assert unit_convertor.get_multiplier("cm", "m", "length")[2] == 0.01

    with pytest.raises(TypeNotFound):
        unit_convertor.get_multiplier("cm", "m", "Weight")

    unit_graph.construct_full_graph()
    assert unit_convertor.get_multiplier("cm", "m", "length")[2] == 0.01
예제 #3
0
def read_unit_table(
    unit_type: str,
    unit_table_directory: Path,
    is_force_add: bool = False,
    is_construct: bool = True,
) -> UnitGraph:
    """Construct a unit graph from the csv file"""

    # Construct the file names
    unit_names_table_filename = unit_table_directory / (unit_type +
                                                        "_names.csv")
    unit_converson_table_filename = unit_table_directory / (unit_type +
                                                            "_conversions.csv")

    # Read the conversion table
    unit_graph = UnitGraph(unit_type)

    # Create the nodes
    with open(unit_names_table_filename, mode="r", encoding="utf-8") as file:
        csv_file = csv.reader(file)
        next(csv_file)
        for line in csv_file:
            unit_graph.add_unit(line[0], line[1], line[2], line[3])

    # Create the nodes
    with open(unit_converson_table_filename, mode="r",
              encoding="utf-8") as file:
        csv_file = csv.reader(file)
        next(csv_file)
        for line in csv_file:
            unit_graph.add_conversion(line[0], line[1], float(line[2]),
                                      is_force_add)

    # Build full graph
    if is_construct:
        unit_graph.construct_full_graph()

    return unit_graph