Add train/2 and add_weight/4 implementations to Markov Chain

* train/2 takes a chain and a list of words to train them on
* add_weight/4 takes a chain, a list of words (the key), the word it
  points to, and an optional increment which will increment the value of
  a weight, or insert the weight.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-07-08 12:59:34 -07:00
parent dd65d87fef
commit 1a73a62a2c
2 changed files with 51 additions and 20 deletions

View File

@@ -2,11 +2,32 @@ defmodule MarkovChainTest do
use ExUnit.Case
alias Omnibot.Contrib.Markov.Chain
test "chain train_one works correctly" do
test "chain train works correctly" do
chain = %Chain {order: 2}
|> Chain.train_one(["foo", "bar"], "baz")
#assert chain.chain == [
#{["foo", "bar"], {"baz", 1}}
#]
|> Chain.train(~w(foo bar baz))
assert chain.chain == [
{["bar", "baz"], %{nil => 1}},
{["foo", "bar"], %{"baz" => 1}},
]
end
test "chain add_weight works correctly" do
chain = %Chain {order: 2}
|> Chain.add_weight(["foo", "bar"], "baz")
assert chain.chain == [
{["foo", "bar"], %{"baz" => 1}}
]
chain = chain |> Chain.add_weight(["foo", "bar"], "baz", 2)
assert chain.chain == [
{["foo", "bar"], %{"baz" => 3}}
]
chain = chain |> Chain.add_weight(["foo", "bar"], "qux")
assert chain.chain == [
{["foo", "bar"], %{"baz" => 3, "qux" => 1}}
]
end
end