packages feed

duckling-0.2.0.0: tests/Duckling/Numeral/EN/Tests.hs

-- 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 #-}

module Duckling.Numeral.EN.Tests
  ( tests
  ) where

import Data.String
import Prelude
import Test.Tasty
import Test.Tasty.HUnit

import Duckling.Dimensions.Types
import Duckling.Numeral.EN.Corpus
import Duckling.Numeral.Types
import Duckling.Testing.Asserts
import Duckling.Testing.Types
import Duckling.Types (Range(..))

tests :: TestTree
tests = testGroup "EN Tests"
  [ makeCorpusTest [Seal Numeral] corpus
  , surroundTests
  , intersectTests
  , rangeTests
  ]

surroundTests :: TestTree
surroundTests = testCase "Surround Tests" $
  mapM_ (analyzedFirstTest testContext testOptions .
    withTargets [Seal Numeral]) xs
  where
    xs = concat
      [ examples (NumeralValue 3)
                 [ "3km"
                 ]
      , examples (NumeralValue 100000)
                 [ "100k€"
                 , "100k\x20ac"
                 ]
      , examples (NumeralValue 10.99)
                 [ "10.99$"
                 ]
      ]

intersectTests :: TestTree
intersectTests = testCase "Intersect Test" $
  mapM_ (analyzedNTest testContext testOptions . withTargets [Seal Numeral]) xs
  where
    xs = [ ("10 millions minus 10", 2)
         ]

rangeTests :: TestTree
rangeTests = testCase "Range Test" $
  mapM_ (analyzedRangeTest testContext testOptions . withTargets [Seal Numeral]) xs
  where
    xs = [ ("negative negative 5", Range 9 19) -- prevent double negatives
         , ("negative-5", Range 8 10) -- prevent double negatives
         , ("- -5", Range 2 4) -- prevent clash with engine tokenizer
         ]