* Markov chains record words correctly from a single line to the end of their line with a couple of exceptions. * Start working on using ETS for storing markov chains, and saving it as a DETS periodically Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
33 lines
812 B
Elixir
33 lines
812 B
Elixir
defmodule MarkovChainTest do
|
|
use ExUnit.Case
|
|
alias Omnibot.Contrib.Markov.Chain
|
|
|
|
test "chain train works correctly" do
|
|
chain = %Chain {order: 2}
|
|
|> 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
|