summaryrefslogtreecommitdiff
path: root/test/MindTest.hs
blob: 65d5a847f45fc1d111e1a8581a133f8e358ca094 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
module MindTest (suite) where

import Test.Tasty
import Test.Tasty.HUnit
import Mind

suite :: TestTree
suite = testGroup "mind tests" $
  [ neuronIndexTests
  , networkTests
  ]

neuronIndexTests :: TestTree
neuronIndexTests = testGroup "neuron index tests" $
  [ testCase "get input index" $ getNeuronIndex (Input 4) @?= 4
  , testCase "get internal index" $ getNeuronIndex (Internal 12) @?= 12
  , testCase "get output index" $ getNeuronIndex (Output 0) @?= 0
  ]

networkTests :: TestTree
networkTests = testGroup "network tests" $
  [ testCase "create empty network" $
    (createEmptyNetwork 3 2 1) @?= Network 3 [[], []] [[]]
  , testCase "output network connection" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Input 0) (Output 0) (negate 1.0))
    @?= (Just $ Network 3 [[], []] [[Edge (Input 0, (negate 1.0))]])
  , testCase "internal network connection" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Internal 0) (Internal 1) (negate 1.0))
    @?= (Just $ Network 3 [[], [Edge (Internal 0, negate 1.0)]] [[]])
  , testCase "internal self-connection" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Internal 0) (Internal 0) (negate 1.0))
    @?= (Just $ Network 3 [[Edge (Internal 0, negate 1.0)], []] [[]])
  , testCase "internal source out of range" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Internal 5) (Internal 0) (negate 1.0))
    @?= Nothing
  , testCase "internal sink out of range" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Internal 1) (Internal (negate 1)) (negate 1.0))
    @?= Nothing
  , testCase "input source out of range" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Input (negate 1)) (Internal 0) (negate 1.0))
    @?= Nothing
  , testCase "input sink" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Input 0) (Input 0) (negate 1.0))
    @?= Nothing
  , testCase "output source" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Output 0) (Output 0) (negate 1.0))
    @?= Nothing
  , testCase "output sink out of range" $
    let network = Network 3 [[], []] [[]]
    in (connectNeurons network (Input 0) (Output 4) (negate 1.0))
    @?= Nothing
  ]