func assertClassificationResult(t *testing.T, c *Classifier, input string, expected string) {
	result := c.Process(input)

	actual := diff.TrimLinesInString(result.Description())
	expected = diff.TrimLinesInString(expected)

	if actual != expected {
		t.Errorf("Classification result mismatch for %#v.", strings.TrimSpace(input))
		t.Logf("Diff:\n%v", diff.LineDiff(expected, actual))
		// t.Logf("actual %#v != expected %#v", actual, expected)
		t.Log("------------------------------")
		t.Logf("Actual:\n%v", actual)
		t.Log("------------------------------")
		t.Logf("Expected:\n%v", expected)
	}
}
func assertParseResult(t *testing.T, definition string, expected string) {
	classifier := NewFuzzyClassifier()
	err := classifier.Add(definition)
	if err != nil {
		t.Fatalf("Classifier returned a parse error: %v", err.Error())
	}

	actual := diff.TrimLinesInString(classifier.Description())
	expected = diff.TrimLinesInString(expected)

	if actual != expected {
		t.Errorf("Parse result mismatch.")
		t.Logf("Diff:\n%v", diff.LineDiff(expected, actual))
		// t.Logf("actual %#v != expected %#v", actual, expected)
		t.FailNow()
	}
}
func assertSplitResult(t *testing.T, input string, expected string) {
	words := SplitIntoWords(input)

	list := make([]string, 0, len(words))
	for _, word := range words {
		list = append(list, word.Raw)
	}

	actual := diff.TrimLinesInString(strings.Join(list, "\n"))
	expected = diff.TrimLinesInString(expected)

	if actual != expected {
		t.Errorf("SplitIntoWords mismatch for %#v.", strings.TrimSpace(input))
		t.Logf("Diff:\n%v", diff.LineDiff(expected, actual))
		// t.Logf("actual %#v != expected %#v", actual, expected)
		t.Log("------------------------------")
		t.Logf("Actual:\n%v", actual)
		t.Log("------------------------------")
		t.Logf("Expected:\n%v", expected)
	}
}