hydra-0.15.0: src/test/haskell/Hydra/Test/Generation.hs
-- Note: this is an automatically generated file. Do not edit.
-- | Test cases for code generation operations such as inferModules and inferModulesGiven
module Hydra.Test.Generation where
import qualified Hydra.Codegen as Codegen
import qualified Hydra.Core as Core
import qualified Hydra.Lib.Eithers as Eithers
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Maybes as Maybes
import qualified Hydra.Lib.Strings as Strings
import qualified Hydra.Packaging as Packaging
import qualified Hydra.Show.Core as ShowCore
import qualified Hydra.Test.TestGraph as TestGraph
import qualified Hydra.Testing as Testing
import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
-- | Test cases for code generation operations
allTests :: Testing.TestGroup
allTests =
Testing.TestGroup {
Testing.testGroupName = "generation",
Testing.testGroupDescription = Nothing,
Testing.testGroupSubgroups = [
Testing.TestGroup {
Testing.testGroupName = "inferModulesGiven",
Testing.testGroupDescription = Nothing,
Testing.testGroupSubgroups = [],
Testing.testGroupCases = [
Testing.TestCaseWithMetadata {
Testing.testCaseWithMetadataName = "incremental inference of subset matches full inference",
Testing.testCaseWithMetadataCase = (Testing.TestCaseUniversal (Testing.UniversalTestCase {
Testing.universalTestCaseActual = (Eithers.either (\e -> "<<inference error>>") (\ms -> Strings.cat (Lists.map (\m -> Strings.cat (Lists.map (\d -> case d of
Packaging.DefinitionType _ -> ""
Packaging.DefinitionTerm v0 -> Strings.cat [
Core.unName (Packaging.termDefinitionName v0),
" :: ",
(Maybes.maybe "<no scheme>" (\ts -> ShowCore.typeScheme ts) (Packaging.termDefinitionTypeScheme v0)),
" = ",
(ShowCore.term (Packaging.termDefinitionTerm v0)),
"\n"]) (Packaging.moduleDefinitions m))) ms)) (Codegen.inferModulesGiven TestGraph.testContext TestGraph.testGraph [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.a"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.a.idA"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "a"],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "a")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "a"))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}] [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}])),
Testing.universalTestCaseExpected = (Eithers.either (\e -> "<<inference error>>") (\ms -> Strings.cat (Lists.map (\m -> Strings.cat (Lists.map (\d -> case d of
Packaging.DefinitionType _ -> ""
Packaging.DefinitionTerm v0 -> Strings.cat [
Core.unName (Packaging.termDefinitionName v0),
" :: ",
(Maybes.maybe "<no scheme>" (\ts -> ShowCore.typeScheme ts) (Packaging.termDefinitionTypeScheme v0)),
" = ",
(ShowCore.term (Packaging.termDefinitionTerm v0)),
"\n"]) (Packaging.moduleDefinitions m))) ms)) (Codegen.inferModules TestGraph.testContext TestGraph.testGraph [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.a"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.a.idA"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "a"],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "a")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "a"))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}] [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}]))})),
Testing.testCaseWithMetadataDescription = Nothing,
Testing.testCaseWithMetadataTags = []},
Testing.TestCaseWithMetadata {
Testing.testCaseWithMetadataName = "incremental inference of full universe matches full inference",
Testing.testCaseWithMetadataCase = (Testing.TestCaseUniversal (Testing.UniversalTestCase {
Testing.universalTestCaseActual = (Eithers.either (\e -> "<<inference error>>") (\ms -> Strings.cat (Lists.map (\m -> Strings.cat (Lists.map (\d -> case d of
Packaging.DefinitionType _ -> ""
Packaging.DefinitionTerm v0 -> Strings.cat [
Core.unName (Packaging.termDefinitionName v0),
" :: ",
(Maybes.maybe "<no scheme>" (\ts -> ShowCore.typeScheme ts) (Packaging.termDefinitionTypeScheme v0)),
" = ",
(ShowCore.term (Packaging.termDefinitionTerm v0)),
"\n"]) (Packaging.moduleDefinitions m))) ms)) (Codegen.inferModulesGiven TestGraph.testContext TestGraph.testGraph [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.a"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.a.idA"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "a"],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "a")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "a"))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}] [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.a"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.a.idA"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "a"],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "a")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "a"))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}])),
Testing.universalTestCaseExpected = (Eithers.either (\e -> "<<inference error>>") (\ms -> Strings.cat (Lists.map (\m -> Strings.cat (Lists.map (\d -> case d of
Packaging.DefinitionType _ -> ""
Packaging.DefinitionTerm v0 -> Strings.cat [
Core.unName (Packaging.termDefinitionName v0),
" :: ",
(Maybes.maybe "<no scheme>" (\ts -> ShowCore.typeScheme ts) (Packaging.termDefinitionTypeScheme v0)),
" = ",
(ShowCore.term (Packaging.termDefinitionTerm v0)),
"\n"]) (Packaging.moduleDefinitions m))) ms)) (Codegen.inferModules TestGraph.testContext TestGraph.testGraph [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.a"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.a.idA"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "a"],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "a")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "a"))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}] [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.a"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.a.idA"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "a"],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "a")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "a"))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.b"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.a"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.b.useId"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.a.idA")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}]))})),
Testing.testCaseWithMetadataDescription = Nothing,
Testing.testCaseWithMetadataTags = []},
Testing.TestCaseWithMetadata {
Testing.testCaseWithMetadataName = "incremental inference uses cached scheme verbatim on vacuous-quantifier universe",
Testing.testCaseWithMetadataCase = (Testing.TestCaseUniversal (Testing.UniversalTestCase {
Testing.universalTestCaseActual = (Eithers.either (\e -> "<<inference error>>") (\ms -> Strings.cat (Lists.map (\m -> Strings.cat (Lists.map (\d -> case d of
Packaging.DefinitionType _ -> ""
Packaging.DefinitionTerm v0 -> Strings.cat [
Core.unName (Packaging.termDefinitionName v0),
" :: ",
(Maybes.maybe "<no scheme>" (\ts -> ShowCore.typeScheme ts) (Packaging.termDefinitionTypeScheme v0)),
" = ",
(ShowCore.term (Packaging.termDefinitionTerm v0)),
"\n"]) (Packaging.moduleDefinitions m))) ms)) (Codegen.inferModulesGiven TestGraph.testContext TestGraph.testGraph [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.v"),
Packaging.moduleTermDependencies = [],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.v.funky"),
Packaging.termDefinitionTerm = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "y"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "z"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "z"))}))}))})),
Packaging.termDefinitionTypeScheme = (Just (Core.TypeScheme {
Core.typeSchemeVariables = [
Core.Name "t0",
(Core.Name "t1"),
(Core.Name "t2")],
Core.typeSchemeBody = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t0")),
Core.functionTypeCodomain = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t1")),
Core.functionTypeCodomain = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t2")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "t2"))}))}))})),
Core.typeSchemeConstraints = Nothing}))})]},
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.w"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.v"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.w.useFunky"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.v.funky")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralString "foo"))})),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 7)))})),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 100)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}] [
Packaging.Module {
Packaging.moduleDescription = Nothing,
Packaging.moduleNamespace = (Packaging.Namespace "hydra.testInput.w"),
Packaging.moduleTermDependencies = [
Packaging.Namespace "hydra.testInput.v"],
Packaging.moduleTypeDependencies = [],
Packaging.moduleDefinitions = [
Packaging.DefinitionTerm (Packaging.TermDefinition {
Packaging.termDefinitionName = (Core.Name "hydra.testInput.w.useFunky"),
Packaging.termDefinitionTerm = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.testInput.v.funky")),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralString "foo"))})),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 7)))})),
Core.applicationArgument = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 100)))})),
Packaging.termDefinitionTypeScheme = Nothing})]}])),
Testing.universalTestCaseExpected = "hydra.testInput.w.useFunky :: (int32) = (hydra.testInput.v.funky\10216string\10217\10216int32\10217\10216int32\10217 @ \"foo\" @ 7:int32 @ 100:int32)\n"})),
Testing.testCaseWithMetadataDescription = Nothing,
Testing.testCaseWithMetadataTags = []}]}],
Testing.testGroupCases = []}