+
+#[test]
+fn test_entry() {
+    #[deriving(Show, PartialEq)] struct A(int);
+    #[deriving(Show, PartialEq)] struct B(int);
+    #[deriving(Show, PartialEq)] struct C(int);
+    #[deriving(Show, PartialEq)] struct D(int);
+    #[deriving(Show, PartialEq)] struct E(int);
+    #[deriving(Show, PartialEq)] struct F(int);
+    #[deriving(Show, PartialEq)] struct J(int);
+
+    let mut map: AnyMap = AnyMap::new();
+    assert_eq!(map.insert(A(10)), None);
+    assert_eq!(map.insert(B(20)), None);
+    assert_eq!(map.insert(C(30)), None);
+    assert_eq!(map.insert(D(40)), None);
+    assert_eq!(map.insert(E(50)), None);
+    assert_eq!(map.insert(F(60)), None);
+
+    // Existing key (insert)
+    match map.entry::<A>() {
+        Vacant(_) => unreachable!(),
+        Occupied(mut view) => {
+            assert_eq!(view.get(), &A(10));
+            assert_eq!(view.set(A(100)), A(10));
+        }
+    }
+    assert_eq!(map.get::<A>().unwrap(), &A(100));
+    assert_eq!(map.len(), 6);
+
+
+    // Existing key (update)
+    match map.entry::<B>() {
+        Vacant(_) => unreachable!(),
+        Occupied(mut view) => {
+            let v = view.get_mut();
+            let new_v = B(v.0 * 10);
+            *v = new_v;
+        }
+    }
+    assert_eq!(map.get().unwrap(), &B(200));
+    assert_eq!(map.len(), 6);
+
+
+    // Existing key (take)
+    match map.entry::<C>() {
+        Vacant(_) => unreachable!(),
+        Occupied(view) => {
+            assert_eq!(view.take(), C(30));
+        }
+    }
+    assert_eq!(map.get::<C>(), None);
+    assert_eq!(map.len(), 5);
+
+
+    // Inexistent key (insert)
+    match map.entry::<J>() {
+        Occupied(_) => unreachable!(),
+        Vacant(view) => {
+            assert_eq!(*view.set(J(1000)), J(1000));
+        }
+    }
+    assert_eq!(map.get::<J>().unwrap(), &J(1000));
+    assert_eq!(map.len(), 6);
+}