Îõ³h$ æ%      !"#$ Safe-Inferred?Ù¬armorÁData structure that holds all the values needed for a golden testarmorConfig data for armor tests. armor7Directory where all the test serializations are stored. armorÉHow many versions back to test for backwards compatibility. A value of Just 0> means that it only tests that the current version satisfies parse . render == id. Just 1Ë means that it will verify that the previous version can still be parse. Just 2Ò the previous two versions, etc. Nothing means that all versions will be tested. armor+The mode of operation for armor test cases. armorŠWrite test files for serializations that don't have them, but don't do any tests to verify that existing files are deserialized properly.armoræRun tests to verify that existing files are deserialized properly, but don't write any missing files.armor!Do both the save and test phases.armoròCore type class for armoring types. Includes a version and all the type's serializations that you want to armor.armor)Current version number for the data type.armorïMap of serializations keyed by a unique ID used to refer to each serialization. A serialization is a tuple of (a -> ByteString) and (ByteString -> Maybe a). Represented here as a prism.armorÆVersion numbers are simple monotonically increasing positive integers.armorDefault value for ArmorConfig.armor¨Tests the serialization backwards compatibility of a data type by storing serialized representations in .test files to be checked into your project's version control.*First, this function checks the directory   for the existence of a file  foo-000.testö. If it doesn't exist, it creates it for each serialization with the serialized representation of the val parameter.ÀNext, it checks that the serialized formats in the most recent   of the stored .testÁ files are parsable by the current version of the serialization.armorSame as Ã, but more convenient for testing several values of the same type.armorÐLower level assertion function that works for a wider array of test frameworks.òThis function can make two different assertions. It fails if the values fail to parse, and it asserts that the values are equal to the expected value. This latter assertion is only done for the most recent version because changes that impact the structure of a data type can result in erroneous failures due to changes in the order that the test cases are generated.«In other words, if you make an innocuous change like adding a constructor and start getting "values didn't match" failures, all you need to do is bump the data type's version. Armor will still guarantee that those serializations parse properly but the incorrect value failures will be suppressed.armorøConstructs the FilePath where the serialization will be stored (relative to the base directory defined in ArmorConfig).ŒThis function uses typeOf as a part of the directory hierarchy to disambiguate tests for different data types. typeOf can contain single quotes, spaces, and parenthesis in the case of type constructors that have type variables so we only take the first alphanumeric characters so that the paths will be meaningful to humans and then add four characters of the type's hash for disambiguation.armorÍCustomizable location where the serializations will be stored. We recommend % as a standard out-of-the-box scheme.   %      !"#$$armor-0.2.0.1-EelpJChn7HUEkVQgTbW5KyArmor GoldenTest gtTestVal gtValNamegtSerializationNamegtPrism gtVersion ArmorConfig acArmorMode acStoreDir acNumVersions ArmorModeSaveOnlyTestOnly SaveAndTestArmoredversionserializationsVersion unVersiondefArmorConfig testArmor testArmorManytestSerializationgoldenFilePath $fEqArmorMode$fOrdArmorMode$fShowArmorMode$fReadArmorMode$fEnumArmorMode$fBoundedArmorMode $fEqVersion $fOrdVersion $fShowVersion $fReadVersion