|
1 | 1 | {-# LANGUAGE PatternSynonyms #-}
|
| 2 | +{-# LANGUAGE QuasiQuotes #-} |
2 | 3 |
|
3 | 4 | {- |
|
4 | 5 | Copyright : (c) Runtime Verification, 2023
|
@@ -41,7 +42,7 @@ import Booster.Pattern.Base
|
41 | 42 | import Booster.Syntax.Json.Externalise (externaliseTerm)
|
42 | 43 | import Booster.Syntax.Json.Internalise (pattern AllowAlias, pattern IgnoreSubsorts)
|
43 | 44 | import Booster.Syntax.Json.Internalise qualified as Syntax
|
44 |
| -import Booster.Syntax.ParsedKore.Internalise (buildDefinitions) |
| 45 | +import Booster.Syntax.ParsedKore.Internalise (buildDefinitions, symb) |
45 | 46 | import Booster.Syntax.ParsedKore.Parser (parseDefinition)
|
46 | 47 | import Kore.Syntax.Json.Types qualified as Syntax
|
47 | 48 | import System.Info (os)
|
@@ -90,6 +91,10 @@ llvmSpec =
|
90 | 91 | it "should work with latin-1strings" $
|
91 | 92 | hedgehog . propertyTest . latin1Prop
|
92 | 93 |
|
| 94 | + beforeAll loadAPI $ |
| 95 | + it "should correct sort injections in non KItem maps" $ |
| 96 | + hedgehog . propertyTest . mapKItemInjProp |
| 97 | + |
93 | 98 | --------------------------------------------------
|
94 | 99 | -- individual hedgehog property tests and helpers
|
95 | 100 |
|
@@ -147,6 +152,41 @@ latin1Prop api = property $ do
|
147 | 152 | | otherwise -> error $ "Unexpected sort " <> show s
|
148 | 153 | otherTerm -> error $ "Unexpected term " <> show otherTerm
|
149 | 154 |
|
| 155 | +mapKItemInjProp :: Internal.API -> Property |
| 156 | +mapKItemInjProp api = property $ do |
| 157 | + let k = wrapIntTerm 1 |
| 158 | + let v = wrapIntTerm 2 |
| 159 | + LLVM.simplifyTerm api testDef (update k v) (SortApp "SortMapValToVal" []) === singleton k v |
| 160 | + where |
| 161 | + update k v = |
| 162 | + SymbolApplication |
| 163 | + (defSymbols Map.! "LblMapValToVal'Coln'primitiveUpdate") |
| 164 | + [] |
| 165 | + [ SymbolApplication |
| 166 | + (defSymbols Map.! "Lbl'Stop'MapValToVal") |
| 167 | + [] |
| 168 | + [] |
| 169 | + , k |
| 170 | + , v |
| 171 | + ] |
| 172 | + |
| 173 | + singleton k v = |
| 174 | + SymbolApplication |
| 175 | + (defSymbols Map.! "Lbl'Unds'Val2Val'Pipe'-'-GT-Unds'") |
| 176 | + [] |
| 177 | + [k, v] |
| 178 | + |
| 179 | + wrapIntTerm :: Int -> Term |
| 180 | + wrapIntTerm i = |
| 181 | + SymbolApplication |
| 182 | + (defSymbols Map.! "inj") |
| 183 | + [SortApp "SortWrappedInt" [], SortApp "SortVal" []] |
| 184 | + [ SymbolApplication |
| 185 | + (defSymbols Map.! "LblwrapInt") |
| 186 | + [] |
| 187 | + [intTerm i] |
| 188 | + ] |
| 189 | + |
150 | 190 | ------------------------------------------------------------
|
151 | 191 |
|
152 | 192 | runKompile :: IO ()
|
@@ -3470,4 +3510,20 @@ defSymbols =
|
3470 | 3510 | }
|
3471 | 3511 | }
|
3472 | 3512 | )
|
| 3513 | + , |
| 3514 | + ( "LblwrapInt" |
| 3515 | + , [symb| symbol LblwrapInt{}(SortInt{}) : SortWrappedInt{} [constructor{}(), functional{}(), injective{}()] |] |
| 3516 | + ) |
| 3517 | + , |
| 3518 | + ( "Lbl'Stop'MapValToVal" |
| 3519 | + , [symb| symbol Lbl'Stop'MapValToVal{}() : SortMapValToVal{} [function{}(), functional{}(), total{}()] |] |
| 3520 | + ) |
| 3521 | + , |
| 3522 | + ( "LblMapValToVal'Coln'primitiveUpdate" |
| 3523 | + , [symb| symbol LblMapValToVal'Coln'primitiveUpdate{}(SortMapValToVal{}, SortVal{}, SortVal{}) : SortMapValToVal{} [function{}(), functional{}(), klabel{}("MapValToVal:primitiveUpdate"), total{}()] |] |
| 3524 | + ) |
| 3525 | + , |
| 3526 | + ( "Lbl'Unds'Val2Val'Pipe'-'-GT-Unds'" |
| 3527 | + , [symb| symbol Lbl'Unds'Val2Val'Pipe'-'-GT-Unds'{}(SortVal{}, SortVal{}) : SortMapValToVal{} [function{}(), functional{}(), klabel{}("_Val2Val|->_"), total{}()] |] |
| 3528 | + ) |
3473 | 3529 | ]
|
0 commit comments