diff --git a/curry-testcases/RBT.curry b/curry-testcases/RBT.curry
new file mode 100644
index 0000000000000000000000000000000000000000..d01be478a90f731561d8689aa8d7a00145361538
--- /dev/null
+++ b/curry-testcases/RBT.curry
@@ -0,0 +1,45 @@
+module RBT
+  (Tree, size, isRBT
+  )   where
+
+--- The colors of a node in a red-black tree.
+data Color = Red | Black
+
+--- The structure of red-black trees.
+data Tree = Node Color Int Tree Tree
+            | Empty
+
+max :: Int -> Int -> Int
+max a b = if (a > b) then a else b
+
+size :: Tree -> Int
+size Empty = 0
+size (Node _ _ l r) = 1 + (size l) + (size r)
+
+isBlack :: Tree -> Bool
+isBlack Empty = True
+isBlack (Node c _ _ _) = c==Black
+
+redNodesHaveBlackChildren :: Tree -> Bool
+redNodesHaveBlackChildren Empty = True
+redNodesHaveBlackChildren (Node Black _ l r) = 
+  (redNodesHaveBlackChildren l) && (redNodesHaveBlackChildren r)
+redNodesHaveBlackChildren (Node Red _ l r) =
+  (isBlack l) && (isBlack r) && (redNodesHaveBlackChildren l) && (redNodesHaveBlackChildren r)
+
+blackBalanced :: Tree -> Bool
+blackBalanced Empty = True
+blackBalanced (Node _ _ l r) =
+  (blackBalanced l) && (blackBalanced r) && (blackHeight l == blackHeight r)
+
+blackHeight :: Tree -> Int
+blackHeight Empty = 0
+blackHeight (Node Black _ l _) = 1 + (blackHeight l)
+blackHeight (Node Red _ l _) = blackHeight l
+
+isRBT :: Tree -> Bool
+isRBT t = (blackBalanced t) && (redNodesHaveBlackChildren t)
+
+valuesWithin :: Tree -> Int -> Bool
+valuesWithin Empty _ = True
+valuesWithin (Node _ v l r) bound = 0 <= v && v <= bound && (valuesWithin l bound) && (valuesWithin r bound)