Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 23 additions & 41 deletions meta/portable-aliases.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,35 +98,33 @@
}
],
"temporalComparison": [
{
"operator": "#=",
"bareName": "teq"
},
{
"operator": "#<>",
"bareName": "tne"
},
{
"operator": "#<",
"bareName": "tlt"
},
{
"operator": "#<=",
"bareName": "tle"
},
{
"operator": "#>",
"bareName": "tgt"
},
{
"operator": "#>=",
"bareName": "tge"
}
{ "operator": "#=", "bareName": "tEq" },
{ "operator": "#<>", "bareName": "tNe" },
{ "operator": "#<", "bareName": "tLt" },
{ "operator": "#<=", "bareName": "tLe" },
{ "operator": "#>", "bareName": "tGt" },
{ "operator": "#>=", "bareName": "tGe" }
],
"everComparison": [
{ "operator": "?=", "bareName": "eEq" },
{ "operator": "?<>", "bareName": "eNe" },
{ "operator": "?<", "bareName": "eLt" },
{ "operator": "?<=", "bareName": "eLe" },
{ "operator": "?>", "bareName": "eGt" },
{ "operator": "?>=", "bareName": "eGe" }
],
"alwaysComparison": [
{ "operator": "%=", "bareName": "aEq" },
{ "operator": "%<>", "bareName": "aNe" },
{ "operator": "%<", "bareName": "aLt" },
{ "operator": "%<=", "bareName": "aLe" },
{ "operator": "%>", "bareName": "aGt" },
{ "operator": "%>=", "bareName": "aGe" }
],
"distance": [
{
"operator": "<->",
"bareName": "tdistance"
"bareName": "tDistance"
},
{
"operator": "|=|",
Expand All @@ -141,22 +139,6 @@
]
},
"alreadyCanonical": [
{
"kind": "family",
"family": "ever",
"operators": [
"?="
],
"pattern": "ever_*"
},
{
"kind": "family",
"family": "always",
"operators": [
"%="
],
"pattern": "always_*"
},
{
"kind": "functions",
"functions": [
Expand Down
27 changes: 15 additions & 12 deletions tests/test_portable.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
SCHEMA = ROOT / "meta" / "portable-aliases.schema.json"
_EXPECTED_FAMILY_SIZES = {
"topology": 4, "timePosition": 4, "spaceX": 4, "spaceY": 4,
"spaceZ": 4, "temporalComparison": 6, "distance": 2, "same": 1,
"spaceZ": 4, "temporalComparison": 6, "everComparison": 6,
"alwaysComparison": 6, "distance": 2, "same": 1,
}


Expand All @@ -39,11 +40,12 @@ def test_known_mappings_verbatim(self):
for op, bn in [("&&", "overlaps"), ("@>", "contains"),
("-|-", "adjacent"), ("<<#", "before"),
("#&>", "overafter"), ("|&>", "overabove"),
("/&>", "overback"), ("#=", "teq"), ("#<>", "tne"),
("/&>", "overback"), ("#=", "tEq"), ("#<>", "tNe"),
("?=", "eEq"), ("%=", "aEq"),
("|=|", "nearestApproachDistance"), ("~=", "same")]:
self.assertEqual(flat[op], bn)
self.assertEqual(sum(_EXPECTED_FAMILY_SIZES.values()), 29)
self.assertEqual(len(flat), 29)
self.assertEqual(sum(_EXPECTED_FAMILY_SIZES.values()), 41)
self.assertEqual(len(flat), 41)

def test_scope_correction_no_exclusion(self):
# The corrected 100%-parity rule: these are IN scope, never deferred.
Expand Down Expand Up @@ -72,10 +74,11 @@ def test_already_canonical_has_kind_discriminator(self):
self.assertIn("functions", entry)

def test_already_canonical_and_provenance(self):
pats = {a.get("pattern") for a in self.d["alreadyCanonical"]
if a.get("kind") == "family"}
self.assertIn("ever_*", pats)
self.assertIn("always_*", pats)
funcs = {f for a in self.d["alreadyCanonical"]
if a.get("kind") == "functions"
for f in a["functions"]}
self.assertIn("eIntersects", funcs)
self.assertIn("atTime", funcs)
self.assertEqual(self.d["provenance"]["nativePR"][:14],
"MobilityDB#107")

Expand All @@ -102,13 +105,13 @@ class AttachTests(unittest.TestCase):
def test_attach_and_derive(self):
idl = attach_portable_aliases({"functions": []}, MAP)
pa = idl["portableAliases"]
self.assertEqual(pa["count"], 29)
self.assertEqual(pa["count"], 41)
self.assertEqual(pa["byOperator"]["&&"], "overlaps")
self.assertEqual(pa["byBareName"]["overlaps"], "&&")
self.assertEqual(pa["bareNames"], sorted(pa["byBareName"]))
# bijective: 29 distinct operators and 29 distinct bare names
self.assertEqual(len(pa["byOperator"]), 29)
self.assertEqual(len(pa["byBareName"]), 29)
# bijective: 41 distinct operators and 41 distinct bare names
self.assertEqual(len(pa["byOperator"]), 41)
self.assertEqual(len(pa["byBareName"]), 41)
self.assertIn("cbuffer", pa["scope"]["inScopeTypeFamilies"])
self.assertEqual(pa["explicitBacking"],
{"nearestApproachDistance": ["nad"]})
Expand Down
10 changes: 5 additions & 5 deletions tests/test_portable_parity.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def test_backed_vs_needs_explicit(self):
"nad_tfloat_tfloat", # explicit backing
]) # of nearestApproach…
r = build_parity(cat)
self.assertEqual(r["total"], 29)
self.assertEqual(r["total"], 41)
self.assertEqual(r["byBareName"]["overlaps"]["status"], "backed")
self.assertEqual(r["byBareName"]["overlaps"]["via"], "prefix")
self.assertEqual(r["byBareName"]["overlaps"]["backedBy"], 2)
Expand All @@ -47,13 +47,13 @@ def test_backed_vs_needs_explicit(self):
self.assertEqual(nad["via"], "explicit")
self.assertNotIn("nearestApproachDistance", r["unbacked"])
self.assertEqual(r["byBareName"]["overlaps"]["family"], "topology")
self.assertEqual(r["byBareName"]["teq"]["operator"], "#=")
self.assertEqual(r["byBareName"]["tEq"]["operator"], "#=")

def test_every_bare_name_classified(self):
r = build_parity(_catalog([])) # nothing backs anything
self.assertEqual(r["total"], 29)
self.assertEqual(r["total"], 41)
self.assertEqual(r["backed"], 0)
self.assertEqual(len(r["unbacked"]), 29) # all flagged, 0 dropped
self.assertEqual(len(r["unbacked"]), 41) # all flagged, 0 dropped
self.assertTrue(all(v["status"] in ("backed",
"needs-explicit-backing")
for v in r["byBareName"].values()))
Expand All @@ -72,7 +72,7 @@ def test_no_bare_name_silently_dropped(self):
r = build_parity(cat)
self.assertEqual(
r["backed"] + r["needsExplicitBacking"], r["total"])
self.assertEqual(r["total"], 29)
self.assertEqual(r["total"], 41)


if __name__ == "__main__":
Expand Down
Loading