diff --git a/routingtable/contributing_asn_list_test.go b/routingtable/contributing_asn_list_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..efc3f2ae79d56ea51af4fba3eb9e10eaf91e4c03
--- /dev/null
+++ b/routingtable/contributing_asn_list_test.go
@@ -0,0 +1,71 @@
+package routingtable
+
+import (
+	"fmt"
+	"testing"
+)
+
+func TestFancy(t *testing.T) {
+	c := NewContributingASNs()
+
+	tests := []struct {
+		runCmd func()
+		expect func() bool
+		msg    string
+	}{
+		// Empty list
+		{
+			runCmd: func() {},
+			expect: func() bool { return !c.IsContributingASN(41981) },
+			msg:    "AS41981 shouldn't be contributing yet.",
+		},
+
+		// Add and remove one ASN
+		{
+			runCmd: func() { c.Add(41981) },
+			expect: func() bool { return c.IsContributingASN(41981) },
+			msg:    "AS41981 should be contributing",
+		},
+		{
+			runCmd: func() { c.Remove(41981) },
+			expect: func() bool { return !c.IsContributingASN(41981) },
+			msg:    "AS41981 shouldn't be contributing no more.",
+		},
+
+		// Two ASNs present
+		{
+			runCmd: func() { c.Add(41981) },
+			expect: func() bool { return c.IsContributingASN(41981) },
+			msg:    "AS41981 should be contributing",
+		},
+		{
+			runCmd: func() { c.Add(201701) },
+			expect: func() bool { return c.IsContributingASN(41981) },
+			msg:    "AS201701 should be contributing",
+		},
+
+		// Add AS41981 2nd time
+		{
+			runCmd: func() { c.Add(41981) },
+			expect: func() bool { return c.IsContributingASN(41981) },
+			msg:    "AS41981 should be still contributing",
+		},
+		{
+			runCmd: func() {},
+			expect: func() bool { return c.contributingASNs[0].asn == 41981 },
+			msg:    "AS41981 is first ASN in list",
+		},
+		{
+			runCmd: func() { fmt.Printf("%+v", c.contributingASNs) },
+			expect: func() bool { return c.contributingASNs[0].count == 2 },
+			msg:    "AS41981 should be present twice.",
+		},
+	}
+
+	for i, test := range tests {
+		test.runCmd()
+		if !test.expect() {
+			t.Errorf("Test %d failed: %v", i, test.msg)
+		}
+	}
+}