packages feed

hydra-0.13.0: src/gen-test/haskell/Generation/Hydra/Test/AnnotationsSpec.hs

-- Note: this is an automatically generated file. Do not edit.

-- DEBUG: Focus namespace = (Namespace {unNamespace = "generation.hydra.test.annotations"},ModuleName {unModuleName = "Annotations"})
-- DEBUG: Namespace mappings:
-- [(Namespace {unNamespace = "hydra.annotations"},ModuleName {unModuleName = "Annotations"}),(Namespace {unNamespace = "hydra.compute"},ModuleName {unModuleName = "Compute"}),(Namespace {unNamespace = "hydra.core"},ModuleName {unModuleName = "Core"}),(Namespace {unNamespace = "hydra.lexical"},ModuleName {unModuleName = "Lexical"}),(Namespace {unNamespace = "hydra.monads"},ModuleName {unModuleName = "Monads"})]

module Generation.Hydra.Test.AnnotationsSpec where

import Hydra.Kernel
import qualified Test.Hspec as H
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Maybe as Y
import qualified Hydra.Annotations as Annotations
import qualified Hydra.Compute as Compute
import qualified Hydra.Core as Core
import qualified Hydra.Lexical as Lexical
import qualified Hydra.Monads as Monads

spec :: H.Spec
spec = H.describe "annotations" $ do
  H.describe "arbitrary annotations" $ do
    H.it "set single annotation #1" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))) (Core.TermLiteral (Core.LiteralString "foo")))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "foo")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "k1", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))))])}))
    H.it "set single annotation #2" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "myKey") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 (-17))))) (Core.TermLiteral (Core.LiteralString "bar")))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "bar")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "myKey", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 (-17)))))])}))
    H.it "set single annotation #3" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "x") (Just (Core.TermLiteral (Core.LiteralString "hello"))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 0))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 0))),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "x", (Core.TermLiteral (Core.LiteralString "hello")))])}))
    H.it "get existing annotation #1" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "k1") (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralString "value"))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))))
      (Just (Core.TermLiteral (Core.LiteralString "value")))
    H.it "get existing annotation #2" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "foo") (Annotations.setTermAnnotation (Core.Name "foo") (Just (Core.TermLiteral (Core.LiteralString ""))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 99)))))
      (Just (Core.TermLiteral (Core.LiteralString "")))
    H.it "get existing annotation #3" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "key") (Annotations.setTermAnnotation (Core.Name "key") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 123)))) (Core.TermLiteral (Core.LiteralString "test"))))
      (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 123))))
    H.it "get missing annotation #1" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "k1") (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt16 42))))
      (Nothing)
    H.it "get missing annotation #2" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "nonexistent") (Core.TermLiteral (Core.LiteralString "hello")))
      (Nothing)
    H.it "get missing annotation #3" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "k1") (Annotations.setTermAnnotation (Core.Name "k2") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1)))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))))
      (Nothing)
    H.it "set multiple annotations #1" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "k2") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 200)))) (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralString "first"))) (Core.TermLiteral (Core.LiteralBoolean True))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralBoolean True)),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "k1", (Core.TermLiteral (Core.LiteralString "first"))),
            (Core.Name "k2", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 200))))])}))
    H.it "set multiple annotations #2" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "b") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 0)))) (Annotations.setTermAnnotation (Core.Name "a") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 (-5))))) (Core.TermLiteral (Core.LiteralString "test"))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "test")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "a", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 (-5))))),
            (Core.Name "b", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 0))))])}))
    H.it "outer annotation overrides inner #1" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralString "outer"))) (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralString "inner"))) (Core.TermLiteral (Core.LiteralString "bar"))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "bar")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "k1", (Core.TermLiteral (Core.LiteralString "outer")))])}))
    H.it "outer annotation overrides inner #2" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "x") (Just (Core.TermLiteral (Core.LiteralString "new"))) (Annotations.setTermAnnotation (Core.Name "x") (Just (Core.TermLiteral (Core.LiteralString "old"))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "x", (Core.TermLiteral (Core.LiteralString "new")))])}))
    H.it "outer annotation overrides inner #3" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "key") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 999)))) (Annotations.setTermAnnotation (Core.Name "key") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1)))) (Core.TermLiteral (Core.LiteralBoolean False))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralBoolean False)),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "key", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 999))))])}))
    H.it "unset single annotation #1" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "k1") Nothing (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralString "foo"))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 137)))))
      (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 137)))
    H.it "unset single annotation #2" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "x") Nothing (Annotations.setTermAnnotation (Core.Name "x") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42)))) (Core.TermLiteral (Core.LiteralString "test"))))
      (Core.TermLiteral (Core.LiteralString "test"))
    H.it "unset one of multiple annotations #1" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "k1") Nothing (Annotations.setTermAnnotation (Core.Name "k2") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 200)))) (Annotations.setTermAnnotation (Core.Name "k1") (Just (Core.TermLiteral (Core.LiteralString "first"))) (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 137))))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 137))),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "k2", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 200))))])}))
    H.it "unset one of multiple annotations #2" $ H.shouldBe
      (Annotations.setTermAnnotation (Core.Name "b") Nothing (Annotations.setTermAnnotation (Core.Name "b") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2)))) (Annotations.setTermAnnotation (Core.Name "a") (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1)))) (Core.TermLiteral (Core.LiteralString "x")))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "x")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "a", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))])}))
  H.describe "descriptions" $ do
    H.it "set description #1" $ H.shouldBe
      (Annotations.setTermDescription (Just "my description") (Core.TermLiteral (Core.LiteralString "foo")))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "foo")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "description", (Core.TermLiteral (Core.LiteralString "my description")))])}))
    H.it "set description #2" $ H.shouldBe
      (Annotations.setTermDescription (Just "") (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "description", (Core.TermLiteral (Core.LiteralString "")))])}))
    H.it "set description #3" $ H.shouldBe
      (Annotations.setTermDescription (Just "A longer description with spaces") (Core.TermLiteral (Core.LiteralBoolean True)))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralBoolean True)),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "description", (Core.TermLiteral (Core.LiteralString "A longer description with spaces")))])}))
    H.it "get existing description #1" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Annotations.getTermDescription (Annotations.setTermDescription (Just "hello") (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))))) Lexical.emptyGraph Monads.emptyTrace))
      (Just (Just "hello"))
    H.it "get existing description #2" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Annotations.getTermDescription (Annotations.setTermDescription (Just "") (Core.TermLiteral (Core.LiteralString "test")))) Lexical.emptyGraph Monads.emptyTrace))
      (Just (Just ""))
    H.it "get existing description #3" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Annotations.getTermDescription (Annotations.setTermDescription (Just "desc") (Core.TermLiteral (Core.LiteralBoolean False)))) Lexical.emptyGraph Monads.emptyTrace))
      (Just (Just "desc"))
    H.it "get missing description #1" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Annotations.getTermDescription (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt16 42)))) Lexical.emptyGraph Monads.emptyTrace))
      (Just Nothing)
    H.it "get missing description #2" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Annotations.getTermDescription (Core.TermLiteral (Core.LiteralString "no description here"))) Lexical.emptyGraph Monads.emptyTrace))
      (Just Nothing)
    H.it "get missing description #3" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Annotations.getTermDescription (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 0)))) Lexical.emptyGraph Monads.emptyTrace))
      (Just Nothing)
    H.it "outer description overrides inner #1" $ H.shouldBe
      (Annotations.setTermDescription (Just "outer") (Annotations.setTermDescription (Just "inner") (Core.TermLiteral (Core.LiteralString "bar"))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralString "bar")),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "description", (Core.TermLiteral (Core.LiteralString "outer")))])}))
    H.it "outer description overrides inner #2" $ H.shouldBe
      (Annotations.setTermDescription (Just "new") (Annotations.setTermDescription (Just "old") (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 99)))))
      (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 99))),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "description", (Core.TermLiteral (Core.LiteralString "new")))])}))
    H.it "unset description #1" $ H.shouldBe
      (Annotations.setTermDescription Nothing (Annotations.setTermDescription (Just "desc") (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 137)))))
      (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 137)))
    H.it "unset description #2" $ H.shouldBe
      (Annotations.setTermDescription Nothing (Annotations.setTermDescription (Just "to be removed") (Core.TermLiteral (Core.LiteralString "test"))))
      (Core.TermLiteral (Core.LiteralString "test"))
  H.describe "layered annotations" $ do
    H.it "get annotation from unannotated term" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "one") (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))))
      (Nothing)
    H.it "get annotation from singly annotated term" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "one") (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))])})))
      (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))
    H.it "get inner annotation from doubly annotated term" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "one") (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermAnnotated (Core.AnnotatedTerm {
            Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
            Core.annotatedTermAnnotation = (M.fromList [
              (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))])})),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "two", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2))))])})))
      (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))
    H.it "get outer annotation from doubly annotated term" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "two") (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermAnnotated (Core.AnnotatedTerm {
            Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
            Core.annotatedTermAnnotation = (M.fromList [
              (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))])})),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "two", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2))))])})))
      (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2))))
    H.it "get non-overridden annotation from triply annotated term" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "two") (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermAnnotated (Core.AnnotatedTerm {
            Core.annotatedTermBody = (Core.TermAnnotated (Core.AnnotatedTerm {
              Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
              Core.annotatedTermAnnotation = (M.fromList [
                (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))])})),
            Core.annotatedTermAnnotation = (M.fromList [
              (Core.Name "two", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2))))])})),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 99))))])})))
      (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2))))
    H.it "outer annotation overrides inner in layered term" $ H.shouldBe
      (Annotations.getTermAnnotation (Core.Name "one") (Core.TermAnnotated (Core.AnnotatedTerm {
          Core.annotatedTermBody = (Core.TermAnnotated (Core.AnnotatedTerm {
            Core.annotatedTermBody = (Core.TermAnnotated (Core.AnnotatedTerm {
              Core.annotatedTermBody = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 42))),
              Core.annotatedTermAnnotation = (M.fromList [
                (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 1))))])})),
            Core.annotatedTermAnnotation = (M.fromList [
              (Core.Name "two", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 2))))])})),
          Core.annotatedTermAnnotation = (M.fromList [
            (Core.Name "one", (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 99))))])})))
      (Just (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 99))))