Skip to content

Commit 10acc35

Browse files
committed
ensure that only first-loaded rule is stored in cache
This ensures that our interpretation of RUL2 is the same as the one used by the game.
1 parent 18ab03b commit 10acc35

1 file changed

Lines changed: 24 additions & 6 deletions

File tree

src/main/scala/scripts/RedundantAdjacenciesChecker.scala

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,26 @@ object RedundantAdjacenciesChecker {
4242
scala.util.Using.resource(new java.util.Scanner(path.toFile(), "UTF-8")) { scanner =>
4343
while(scanner.hasNextLine()) {
4444
parseRuleWithRestrictedDriveside(scanner.nextLine(), drivesideFile) match {
45-
case Some((rule, Rhd)) => rulesRhd.addOne(new EquivRule(rule), rule)
46-
case Some((rule, Lhd)) => rulesLhd.addOne(new EquivRule(rule), rule)
47-
case Some((rule, RhdAndLhd)) => rulesShared.addOne(new EquivRule(rule), rule)
45+
// only the first matching rule is loaded by the game, so we store only the first one read
46+
case Some((rule, Rhd)) =>
47+
val key = new EquivRule(rule)
48+
if (!rulesShared.contains(key) && !rulesRhd.contains(key))
49+
rulesRhd.addOne(key, rule)
50+
case Some((rule, Lhd)) =>
51+
val key = new EquivRule(rule)
52+
if (!rulesShared.contains(key) && !rulesLhd.contains(key))
53+
rulesLhd.addOne(key, rule)
54+
case Some((rule, RhdAndLhd)) =>
55+
val key = new EquivRule(rule)
56+
if (!rulesShared.contains(key)) {
57+
if (!rulesRhd.contains(key) && !rulesLhd.contains(key))
58+
rulesShared.addOne(key, rule)
59+
else
60+
require(
61+
rulesRhd.contains(key) == rulesLhd.contains(key),
62+
s"There's an unexpected rule conflict that differs between RHD and LHD: $rule"
63+
)
64+
}
4865
case None => // ignore
4966
}
5067
}
@@ -69,9 +86,10 @@ object RedundantAdjacenciesChecker {
6986
case Some((rule, Lhd)) => isRedundantAdjacency(rule, lookupRuleLhd)
7087
case Some((rule, RhdAndLhd)) =>
7188
val b = isRedundantAdjacency(rule, lookupRuleRhd)
72-
if (b != isRedundantAdjacency(rule, lookupRuleLhd)) {
73-
throw new AssertionError(s"Redundancies should be the same for RHD and LHD: $rule") // hopefully this will always be the case
74-
}
89+
require(
90+
b == isRedundantAdjacency(rule, lookupRuleLhd),
91+
s"Redundancies should be the same for RHD and LHD: $rule" // hopefully this will always be the case
92+
)
7593
b
7694
case None => false // comments are not redundant
7795
}

0 commit comments

Comments
 (0)