   (assert (= (rem 2 5) 2))
   (assert (= (rem 2 -5) 2))
   (assert (= (rem 0 3) 0))
+
+  ;; group-by
+  (let [d (group-by second {:a 1 :b 2 :c 1 :d 4 :e 1 :f 2})]
+    (assert (= 3 (count (get d 1))))
+    (assert (= 2 (count (get d 2))))
+    (assert (= 1 (count (get d 4)))))
   
   :ok
   )
 
 #_(goog.global/print (assoc {} :a 1))
+
+
+

  "Returns a random floating point number between 0 (inclusive) and
  n (default 1) (exclusive)."
  ([] (rand 1))
  ([n] (math/uniformRandom 0 n)))

(defn rand-int
  "Returns a random integer between 0 (inclusive) and n (exclusive)."
  [n] (math/randomInt n))

(defn rand-nth
  "Return a random element of the (sequential) collection. Will have

  (:require [goog.string :as gstring]
            [goog.string.StringBuffer :as gstringbuf]
            [goog.object :as gobject]
            [goog.array :as garray]))

(defn truth_
  "Internal - do not use!"
