func root(n string, base int) (persistence, root int, err error) {
	i, err := digit.Sum(n, base)
	if err != nil {
		return 0, 0, err
	}
	if len(n) == 1 {
		return 0, int(i), nil
	}
	for {
		persistence++
		n := strconv.FormatInt(i, base)
		if len(n) == 1 {
			root = int(i)
			break
		}
		i, _ = digit.Sum(n, base)
	}
	return
}
func testSum(t *testing.T) {
	for _, tc := range testData {
		ds, err := digit.Sum(tc.n, tc.base)
		if err != nil {
			t.Fatal("test case", tc, err)
		}
		if ds != tc.dSum {
			t.Fatal("test case", tc, "got", ds, "expected", tc.dSum)
		}
	}
}