Skip to content

Coverage for Java is tracked for lines, while Go is tracked for ranges #193

@bauersimon

Description

@bauersimon

Looking at similar implementations in both languages (and tests with full 100% coverage reported by gotestsum and maven respectively):

go

package light

func validDate(day int, month int, year int) bool {
	monthDays := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

	if year < 1583 {
		return false
	}
	if month < 1 || month > 12 {
		return false
	}
	if day < 1 {
		return false
	}
	if month == 2 {
		if (year%400) != 0 && (year%4) == 0 {
			if day > 29 {
				return false
			}
		} else {
			if day > 28 {
				return false
			}
		}
	} else {
		if day > monthDays[month-1] {
			return false
		}
	}

	return true
}

result of symflower test:

[
  {
    "FileRange": "light/validateDate.go:12:2-light/validateDate.go:14:3",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "light/validateDate.go:15:2-light/validateDate.go:19:5",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "light/validateDate.go:20:9-light/validateDate.go:23:5",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "light/validateDate.go:25:8-light/validateDate.go:28:4",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "light/validateDate.go:31:2-light/validateDate.go:31:13",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "light/validateDate.go:3:51-light/validateDate.go:8:3",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "light/validateDate.go:9:2-light/validateDate.go:11:3",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  }
]

coverage objects (all entries with count > 0): 7

java

package com.eval;

class ValidDate {
    static boolean validDate(int day, int month, int year) {
		int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

		if (year < 1583) {
			return false;
		}
		if (month < 1 || month > 12) {
			return false;
		}
		if (day < 1) {
			return false;
		}
		if (month == 2) {
			if ((year % 400) != 0 && (year % 4) == 0) {
				if (day > 29) {
					return false;
				}
			} else {
				if (day > 28) {
					return false;
				}
			}
		} else {
			if (day > monthDays[month-1]) {
				return false;
			}
		}

		return true;
	}
}

result of symflower test

[
  {
    "FileRange": "com/eval/ValidDate.java:10:1-com/eval/ValidDate.java:10:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 8
  },
  {
    "FileRange": "com/eval/ValidDate.java:10:1-com/eval/ValidDate.java:10:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 12
  },
  {
    "FileRange": "com/eval/ValidDate.java:11:1-com/eval/ValidDate.java:11:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:11:1-com/eval/ValidDate.java:11:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 2
  },
  {
    "FileRange": "com/eval/ValidDate.java:13:1-com/eval/ValidDate.java:13:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 7
  },
  {
    "FileRange": "com/eval/ValidDate.java:13:1-com/eval/ValidDate.java:13:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 9
  },
  {
    "FileRange": "com/eval/ValidDate.java:14:1-com/eval/ValidDate.java:14:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:14:1-com/eval/ValidDate.java:14:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "com/eval/ValidDate.java:16:1-com/eval/ValidDate.java:16:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 2
  },
  {
    "FileRange": "com/eval/ValidDate.java:16:1-com/eval/ValidDate.java:16:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 12
  },
  {
    "FileRange": "com/eval/ValidDate.java:17:1-com/eval/ValidDate.java:17:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 3
  },
  {
    "FileRange": "com/eval/ValidDate.java:17:1-com/eval/ValidDate.java:17:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 7
  },
  {
    "FileRange": "com/eval/ValidDate.java:18:1-com/eval/ValidDate.java:18:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 1
  },
  {
    "FileRange": "com/eval/ValidDate.java:18:1-com/eval/ValidDate.java:18:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 3
  },
  {
    "FileRange": "com/eval/ValidDate.java:19:1-com/eval/ValidDate.java:19:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:19:1-com/eval/ValidDate.java:19:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "com/eval/ValidDate.java:22:1-com/eval/ValidDate.java:22:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 2
  },
  {
    "FileRange": "com/eval/ValidDate.java:22:1-com/eval/ValidDate.java:22:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 4
  },
  {
    "FileRange": "com/eval/ValidDate.java:23:1-com/eval/ValidDate.java:23:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:23:1-com/eval/ValidDate.java:23:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "com/eval/ValidDate.java:27:1-com/eval/ValidDate.java:27:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 1
  },
  {
    "FileRange": "com/eval/ValidDate.java:27:1-com/eval/ValidDate.java:27:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 3
  },
  {
    "FileRange": "com/eval/ValidDate.java:28:1-com/eval/ValidDate.java:28:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:28:1-com/eval/ValidDate.java:28:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  },
  {
    "FileRange": "com/eval/ValidDate.java:32:1-com/eval/ValidDate.java:32:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:32:1-com/eval/ValidDate.java:32:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 4
  },
  {
    "FileRange": "com/eval/ValidDate.java:4:1-com/eval/ValidDate.java:4:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:4:1-com/eval/ValidDate.java:4:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 11
  },
  {
    "FileRange": "com/eval/ValidDate.java:5:1-com/eval/ValidDate.java:5:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:5:1-com/eval/ValidDate.java:5:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 11
  },
  {
    "FileRange": "com/eval/ValidDate.java:7:1-com/eval/ValidDate.java:7:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 10
  },
  {
    "FileRange": "com/eval/ValidDate.java:7:1-com/eval/ValidDate.java:7:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 12
  },
  {
    "FileRange": "com/eval/ValidDate.java:8:1-com/eval/ValidDate.java:8:99999",
    "CoverageType": "NodeCoverageFalse",
    "Count": 0
  },
  {
    "FileRange": "com/eval/ValidDate.java:8:1-com/eval/ValidDate.java:8:99999",
    "CoverageType": "NodeCoverageTrue",
    "Count": 1
  }
]

coverage objects (all entries with count > 0): 24

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpostponedThis issue/PR is postponed until there is a very good reason (e.g. $$$) to implement it.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions