  Copyright ( c ) 2016 - present , Facebook , Inc.
-- All rights reserved.
--
-- This source code is licensed under the BSD-style license found in the
-- LICENSE file in the root directory of this source tree.


{-# LANGUAGE OverloadedStrings #-}
# LANGUAGE TupleSections #

module Duckling.Time.SV.Tests
  ( tests ) where

import Data.String
import Prelude
import Test.Tasty
import Test.Tasty.HUnit
import qualified Data.HashSet as HashSet

import Duckling.Api
import Duckling.Dimensions.Types
import Duckling.Locale
import Duckling.Resolve
import Duckling.Testing.Asserts
import Duckling.Testing.Types hiding (examples)
import Duckling.Time.Corpus
import Duckling.Time.SV.Corpus
import Duckling.TimeGrain.Types (Grain(..))

tests :: TestTree
tests = testGroup "SV Tests"
  [ makeCorpusTest [Seal Time] corpus
  , ambiguousTests
  ]

-- Ambiguous examples occur when multiple tokens have the same value,
  but one is more flexible ( they differ in the ` values ` field ) .
  For example , " i morgonen " can both mean " this morning " and " in the morning " .
ambiguousTests :: TestTree
ambiguousTests = testCase "Ambiguous Tests" $ mapM_ check xs
  where
    xs = examples (datetimeInterval ((2013, 2, 12, 4, 0, 0), (2013, 2, 12, 12, 0, 0)) Hour)
                  [ "i morgonen"
                  ]
    ctx = testContext {locale = makeLocale SV Nothing}
    dims = HashSet.singleton $ Seal Time
    check :: Example -> IO ()
    check (input, predicate) = case analyze input ctx testOptions dims of
      [] -> assertFailure $ "empty result on " ++ show input
      xs -> mapM_ (assertBool ("predicate on " ++ show input) . predicate ctx) xs

 All rights reserved.

 This source code is licensed under the BSD-style license found in the
 LICENSE file in the root directory of this source tree.
# LANGUAGE OverloadedStrings #
 Ambiguous examples occur when multiple tokens have the same value,
  Copyright ( c ) 2016 - present , Facebook , Inc.


# LANGUAGE TupleSections #

module Duckling.Time.SV.Tests
  ( tests ) where

import Data.String
import Prelude
import Test.Tasty
import Test.Tasty.HUnit
import qualified Data.HashSet as HashSet

import Duckling.Api
import Duckling.Dimensions.Types
import Duckling.Locale
import Duckling.Resolve
import Duckling.Testing.Asserts
import Duckling.Testing.Types hiding (examples)
import Duckling.Time.Corpus
import Duckling.Time.SV.Corpus
import Duckling.TimeGrain.Types (Grain(..))

tests :: TestTree
tests = testGroup "SV Tests"
  [ makeCorpusTest [Seal Time] corpus
  , ambiguousTests
  ]

  but one is more flexible ( they differ in the ` values ` field ) .
  For example , " i morgonen " can both mean " this morning " and " in the morning " .
ambiguousTests :: TestTree
ambiguousTests = testCase "Ambiguous Tests" $ mapM_ check xs
  where
    xs = examples (datetimeInterval ((2013, 2, 12, 4, 0, 0), (2013, 2, 12, 12, 0, 0)) Hour)
                  [ "i morgonen"
                  ]
    ctx = testContext {locale = makeLocale SV Nothing}
    dims = HashSet.singleton $ Seal Time
    check :: Example -> IO ()
    check (input, predicate) = case analyze input ctx testOptions dims of
      [] -> assertFailure $ "empty result on " ++ show input
      xs -> mapM_ (assertBool ("predicate on " ++ show input) . predicate ctx) xs
