Skip to content

Commit

Permalink
fix: Fix err in file comparison when diff lengths
Browse files Browse the repository at this point in the history
  • Loading branch information
jag1g13 committed Sep 6, 2020
1 parent c44f621 commit 6994993
Showing 1 changed file with 29 additions and 23 deletions.
52 changes: 29 additions & 23 deletions pycgtool/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
This module contains some general purpose utility functions used in PyCGTOOL.
"""

import os
import itertools
import random
import math
from collections import namedtuple
import filecmp
import functools
import itertools
import logging
import math
import os
import random
import re
import functools

from collections import namedtuple
import typing

import numpy as np

Expand Down Expand Up @@ -353,6 +353,20 @@ def cmp_file_whitespace_float(ref_filename, test_filename, rtol=0.01, verbose=Fa
return cmp_whitespace_float(ref_lines, test_lines, rtol=rtol, verbose=verbose)


def number_or_string(string: str) -> typing.Union[float, int, str]:
"""Convert string into an int or float if possible."""
try:
as_float = float(string)
as_int = int(as_float)
if as_int == as_float:
return as_int

return as_float

except ValueError:
return string


def cmp_whitespace_float(ref_lines, test_lines, rtol=0.01, verbose=False):
"""
Compare two iterables of lines ignoring spacing on a line and using a tolerance on floats
Expand All @@ -363,26 +377,19 @@ def cmp_whitespace_float(ref_lines, test_lines, rtol=0.01, verbose=False):
:param bool verbose: Print failing lines
:return: True if all lines are the same, else False
"""
def number_or_string(string):
try:
as_float = float(string)
as_int = int(as_float)
if as_int == as_float:
return as_int
return as_float
except ValueError:
return string

diff_lines = []
for i, (ref_line, test_line) in enumerate(itertools.zip_longest(ref_lines, test_lines)):
# Shortcut trivial comparisons
if ref_line is None or test_line is None:
diff_lines.append((i, ref_line, test_line))
continue

if ref_line == test_line:
continue

ref_toks = ref_line.split()
test_toks = test_line.split()

if len(ref_toks) != len(test_toks):
diff_lines.append((i, ref_line, test_line))

Expand All @@ -397,11 +404,11 @@ def number_or_string(string):
diff_lines.append((i, ref_line, test_line))

if verbose and diff_lines:
print("Lines fail comparison:")
for i, ref_line, test_line in diff_lines:
print("Line {}".format(i))
print("Ref: {0}".format(ref_line))
print("Test: {0}".format(test_line))
print("Lines fail comparison:")
for i, ref_line, test_line in diff_lines:
print("Line {}".format(i))
print("Ref: {0}".format(ref_line))
print("Test: {0}".format(test_line))

return len(diff_lines) == 0

Expand Down Expand Up @@ -609,4 +616,3 @@ def any_starts_with(iterable, char):
return iterable.startswith(char)
else:
return any(map(recurse, iterable))

0 comments on commit 6994993

Please sign in to comment.