summaryrefslogtreecommitdiff
path: root/source/Test
diff options
context:
space:
mode:
authoradelon <22380201+adelon@users.noreply.github.com>2026-08-02 20:51:00 +0200
committeradelon <22380201+adelon@users.noreply.github.com>2026-08-02 20:51:00 +0200
commit63451bdca1f078eef1069cba9bba1b278fc31cde (patch)
tree323263bde1ff575137284d986dbc90dfa9f19987 /source/Test
parentadfa4e9c85d200cd32a53609174cc44646d43f6a (diff)
Separate ordered tuples from PairSet
Diffstat (limited to 'source/Test')
-rw-r--r--source/Test/Unit/Lexicon.hs3
-rw-r--r--source/Test/Unit/Module.hs98
2 files changed, 100 insertions, 1 deletions
diff --git a/source/Test/Unit/Lexicon.hs b/source/Test/Unit/Lexicon.hs
index cd0a886..54b4bd4 100644
--- a/source/Test/Unit/Lexicon.hs
+++ b/source/Test/Unit/Lexicon.hs
@@ -43,7 +43,7 @@ retainsBaseMixfixGrouping =
(fmap (fmap canonicalEntryShape) baseSyntaxManifest)
assertEqual
"cache-epoch base syntax identity"
- "96d03072c3d395185ef9dee2f783f49afecdb177bb68930e302f4611e97397b1"
+ "97acdc8153821b20dd0f45cf9d44870705723bb60737f7bacbb9ac31a98987a5"
(cacheDigestHex
(baseSyntaxInterfaceIdDigest
baseSyntaxInterfaceId))
@@ -319,6 +319,7 @@ expectedBaseRows =
, ("abs", NonAssoc)
, ("cons", NonAssoc)
, ("pair", NonAssoc)
+ , ("upair", NonAssoc)
]
, [ ("emptyset", NonAssoc)
, ("naturals", NonAssoc)
diff --git a/source/Test/Unit/Module.hs b/source/Test/Unit/Module.hs
index b8a7854..9cec861 100644
--- a/source/Test/Unit/Module.hs
+++ b/source/Test/Unit/Module.hs
@@ -413,6 +413,25 @@ buildsConfinedFinalPrelude = do
]
`Set.isSubsetOf` foundationTags
)
+ pairsetBatch <- batchByAlias
+ (FinalPrelude.finalPreludePrefix candidate)
+ "pairset_iff"
+ pairsetFact <- sole "pairset foundation fact"
+ (Semantic.declarationDeltaFacts
+ (Declaration.committedBatchDelta pairsetBatch))
+ assertEqual "pairset foundation safety"
+ Authority.cleanAuthoritySafety
+ (Authority.factAuthoritySafety
+ (Semantic.semanticFactAuthority pairsetFact))
+ pairsetValidation <- sole "pairset foundation validation"
+ (Declaration.committedBatchProofValidations pairsetBatch)
+ assertEqual "pairset exact foundation authority"
+ (Authority.CheckedKernelConstruction
+ (Authority.FoundationLeaf
+ Foundation.PairSetCharacteristic))
+ (Authority.validationDirectAuthorization
+ (Semantic.proofValidationRecordCertificate
+ pairsetValidation))
FinalPrelude.FinalPreludeBuildFailed failure prefix ->
assertFailure
("final prelude failed after "
@@ -567,8 +586,19 @@ checksProtectedNatClosure = do
]
assertTransparentObjectAlias setModule "cons"
assertTransparentObjectAlias setModule "union"
+ assertOpaqueObjectKey
+ setModule
+ "pair"
+ (Semantic.SemanticExpressionFunction
+ (Raw.mixfixPattern Raw.PairSymbol))
assertCleanFactAlias setModule "cons_iff"
assertCleanFactAlias setModule "union_iff"
+ traverse_
+ (assertSourceAxiomAlias setModule)
+ [ "pair_eq_iff"
+ , "fst_eq"
+ , "snd_eq"
+ ]
assertBool "protected checking exercised Vampire"
. (> 0)
=<< readIORef runs
@@ -600,6 +630,27 @@ assertTransparentObjectAlias sealed name = do
Identity.TransparentObject
(Identity.objectIdFamily target)
+assertOpaqueObjectKey
+ :: Module.SealedTypedModule
+ -> Text
+ -> Semantic.SemanticGlobalKey
+ -> Assertion
+assertOpaqueObjectKey sealed name key = do
+ binding <- sole
+ ("semantic binding for " <> StrictText.unpack name)
+ [ candidate
+ | delta <- localSemanticDeltas sealed
+ , candidate <- Semantic.semanticEnvironmentBindings
+ (Semantic.declarationDeltaEnvironment delta)
+ , Semantic.semanticGlobalBindingKey candidate == key
+ ]
+ let target = Semantic.semanticGlobalTargetObject
+ (Semantic.semanticGlobalBindingTarget binding)
+ assertEqual
+ ("opaque object for " <> StrictText.unpack name)
+ Identity.OpaqueObject
+ (Identity.objectIdFamily target)
+
localObjectAliasTarget
:: Module.SealedTypedModule
-> Text
@@ -640,6 +691,53 @@ assertCleanFactAlias sealed name = do
(Authority.factAuthoritySafety
(Semantic.semanticFactAuthority fact))
+assertSourceAxiomAlias
+ :: Module.SealedTypedModule
+ -> Text
+ -> Assertion
+assertSourceAxiomAlias sealed name = do
+ batch <- batchByAlias
+ (Module.sealedTypedModulePrefix sealed)
+ name
+ fact <- sole
+ ("source axiom fact " <> StrictText.unpack name)
+ (Semantic.declarationDeltaFacts
+ (Declaration.committedBatchDelta batch))
+ assertEqual
+ ("source axiom safety for " <> StrictText.unpack name)
+ (Authority.authoritySafety
+ (Authority.singletonEscapeKind Authority.SourceAxiom))
+ (Authority.factAuthoritySafety
+ (Semantic.semanticFactAuthority fact))
+ validation <- maybe
+ (assertFailure
+ ("source axiom validation for " <> StrictText.unpack name)
+ >> fail "unreachable")
+ pure
+ (Declaration.committedBatchDeclarationValidation batch)
+ certificate <- sole
+ ("source axiom certificate for " <> StrictText.unpack name)
+ (Semantic.declarationValidationRecordCertificates validation)
+ assertEqual
+ ("source axiom authority for " <> StrictText.unpack name)
+ Authority.SourceAxiomAuthorization
+ (Authority.validationDirectAuthorization certificate)
+
+batchByAlias
+ :: Declaration.PendingModulePrefix
+ -> Text
+ -> IO Declaration.CommittedDeclarationBatch
+batchByAlias prefix name =
+ sole
+ ("declaration batch for " <> StrictText.unpack name)
+ [ batch
+ | batch <- Declaration.pendingModulePrefixBatches prefix
+ , alias <- Semantic.declarationDeltaAliases
+ (Declaration.committedBatchDelta batch)
+ , Semantic.semanticAliasName alias
+ == Semantic.semanticName name
+ ]
+
localDeltaByAlias
:: Module.SealedTypedModule
-> Text