@@ -154,6 +154,11 @@ class PersonDefault(Metric["PersonDefault"]):
154
154
name : str
155
155
age : int = 0
156
156
157
+ @make_dataclass (use_attr = use_attr )
158
+ class PersonAgeFloat (Metric ["PersonAgeFloat" ]):
159
+ name : Optional [str ]
160
+ age : Optional [float ]
161
+
157
162
@make_dataclass (use_attr = use_attr )
158
163
class ListPerson (Metric ["ListPerson" ]):
159
164
name : List [Optional [str ]]
@@ -403,6 +408,42 @@ def test_metric_values(data_and_classes: DataBuilder) -> None:
403
408
assert list (data_and_classes .Person (name = "name" , age = 42 ).values ()) == ["name" , 42 ]
404
409
405
410
411
+ @pytest .mark .parametrize ("data_and_classes" , (attr_data_and_classes , dataclasses_data_and_classes ))
412
+ def test_metric_round_floats (data_and_classes : DataBuilder ) -> None :
413
+ assert list (data_and_classes .Person (name = "John Doe" , age = 42.123456 ).formatted_values ()) == [
414
+ "John Doe" ,
415
+ "42.12346" ,
416
+ ]
417
+
418
+
419
+ @pytest .mark .parametrize ("data_and_classes" , (attr_data_and_classes , dataclasses_data_and_classes ))
420
+ def test_metric_strips_trailing_whitespace (tmp_path : Path , data_and_classes : DataBuilder ) -> None :
421
+ test_tsv = tmp_path / "test.tsv"
422
+ with test_tsv .open ("w" ) as fout :
423
+ fout .write ("name\t age\n " )
424
+ fout .write (" John Doe \t 42\n " ) # whitespace around name
425
+ fout .write ("Jane Doe\t 35 \n " ) # whitespace around age
426
+ fout .write (" Someone Else \t 47 \n " ) # whitespace around both
427
+
428
+ persons = list (data_and_classes .Person .read (test_tsv ))
429
+ assert len (persons ) == 3
430
+ assert persons [0 ].name == " John Doe "
431
+ assert persons [0 ].age == 42
432
+ assert persons [1 ].name == "Jane Doe"
433
+ assert persons [1 ].age == 35
434
+ assert persons [2 ].name == " Someone Else "
435
+ assert persons [2 ].age == 47
436
+
437
+ persons = list (data_and_classes .Person .read (test_tsv , strip_whitespace = True ))
438
+ assert len (persons ) == 3
439
+ assert persons [0 ].name == "John Doe"
440
+ assert persons [0 ].age == 42
441
+ assert persons [1 ].name == "Jane Doe"
442
+ assert persons [1 ].age == 35
443
+ assert persons [2 ].name == "Someone Else"
444
+ assert persons [2 ].age == 47
445
+
446
+
406
447
@pytest .mark .parametrize ("data_and_classes" , (attr_data_and_classes , dataclasses_data_and_classes ))
407
448
def test_metric_items (data_and_classes : DataBuilder ) -> None :
408
449
"""`metric.items()` should return a list of (key, value) tuples."""
0 commit comments