diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
index b689fbd..3e18319 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
@@ -123,12 +123,12 @@
     assertEquals(Sets.newHashSet("foo", "wiz",
             "False", "None", "True",
             "-", "bool", "dict", "enumerate", "int", "len", "list",
-            "range", "repr", "select", "sorted", "str", "zip"),
+            "range", "repr", "reversed", "select", "sorted", "str", "zip"),
         outerEnv.getVariableNames());
     assertEquals(Sets.newHashSet("foo", "wiz", "quux",
             "False", "None", "True",
             "-", "bool", "dict", "enumerate", "int", "len", "list",
-            "range", "repr", "select", "sorted", "str", "zip"),
+            "range", "repr", "reversed", "select", "sorted", "str", "zip"),
         innerEnv.getVariableNames());
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index e76471c..d1e307a 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -770,6 +770,51 @@
   }
 
   @Test
+  public void testReversedWithInvalidTypes() throws Exception {
+    new BothModesTest()
+        .testIfExactError("type 'NoneType' is not iterable", "reversed(None)")
+        .testIfExactError("type 'int' is not iterable", "reversed(1)")
+        .testIfExactError(
+            "Argument to reversed() must be a sequence, not a dictionary.", "reversed({1: 3})");
+    new SkylarkTest()
+        .testIfExactError(
+            "Argument to reversed() must be a sequence, not a set.", "reversed(set([1]))");
+  }
+
+  @Test
+  public void testReversedWithLists() throws Exception {
+    new BothModesTest()
+        .testEval("reversed([])", "[]")
+        .testEval("reversed([1])", "[1]")
+        .testEval("reversed([1, 2, 3, 4, 5])", "[5, 4, 3, 2, 1]")
+        .testEval("reversed([[1, 2], 3, 4, [5]])", "[[5], 4, 3, [1, 2]]")
+        .testEval("reversed([1, 1, 1, 1, 2])", "[2, 1, 1, 1, 1]");
+  }
+
+  @Test
+  public void testReversedWithStrings() throws Exception {
+    new BothModesTest()
+        .testEval("reversed('')", "['']")
+        .testEval("reversed('a')", "['a']")
+        .testEval("reversed('abc')", "['c', 'b', 'a']")
+        .testEval("reversed('__test  ')", "[' ', ' ', 't', 's', 'e', 't', '_', '_']")
+        .testEval("reversed('bbb')", "['b', 'b', 'b']");
+  }
+
+  @Test
+  public void testReversedNoSideEffects() throws Exception {
+    new SkylarkTest()
+        .testEval(
+            "def foo():\n"
+                + "  x = ['a', 'b']\n"
+                + "  y = reversed(x)\n"
+                + "  y += ['c']\n"
+                + "  return x\n"
+                + "foo()",
+            "['a', 'b']");
+  }
+
+  @Test
   public void testListSlice() throws Exception {
     new BothModesTest()
         .testEval("[0,1,2,3][0:-1]", "[0, 1, 2]")
