Skip to content

Commit 68ce59f

Browse files
author
Yannick Scherer
committed
Merge pull request #37 from eraserhd/integer_node_fix
fix integer nodes with negative values.
2 parents 9d58a84 + a5b445f commit 68ce59f

File tree

5 files changed

+47
-3
lines changed

5 files changed

+47
-3
lines changed

project.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
:dependencies [[org.clojure/clojure "1.7.0"]
1010
[org.clojure/tools.reader "0.9.2"]]
1111
:profiles {:dev {:dependencies [[midje "1.7.0" :exclusions [joda-time]]
12-
[joda-time "2.8.2"]]
12+
[joda-time "2.8.2"]
13+
[org.clojure/test.check "0.7.0"]]
1314
:plugins [[lein-midje "3.1.3"]
1415
[codox "0.8.10"]]
1516
:exclusions [org.clojure/clojure]

src/rewrite_clj/node/integer.clj

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111
(length [this]
1212
(count (node/string this)))
1313
(string [_]
14-
(let [s (.toString (biginteger value) base)
14+
(let [sign (if (< value 0)
15+
"-")
16+
abs-value (cond-> value (< value 0) -)
17+
s (.toString (biginteger abs-value) base)
1518
prefix (case (long base)
1619
8 "0"
1720
10 ""
1821
16 "0x"
1922
(str base "r"))]
20-
(str prefix s)))
23+
(str sign prefix s)))
2124

2225
Object
2326
(toString [this]

test/rewrite_clj/node/generators.clj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
(ns rewrite-clj.node.generators
2+
(:require [clojure.test.check.generators :as gen]
3+
[rewrite-clj.node :as node]))
4+
5+
(def integer-node
6+
(gen/fmap
7+
(fn [[n base]]
8+
(node/integer-node n base))
9+
(gen/tuple
10+
(gen/choose Long/MIN_VALUE Long/MAX_VALUE)
11+
(gen/choose 2 36))))
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
(ns rewrite-clj.node.integer-test
2+
(:require [clojure.test.check.properties :as prop]
3+
[midje.sweet :refer :all]
4+
[rewrite-clj.node :as node]
5+
[rewrite-clj.node.generators :as g]
6+
[rewrite-clj.test-helpers :refer :all]))
7+
8+
(facts "about integer nodes"
9+
(property "all integer nodes produce readable strings" 100
10+
(prop/for-all [node g/integer-node]
11+
(read-string (node/string node)))))

test/rewrite_clj/test_helpers.clj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
(ns rewrite-clj.test-helpers
2+
(:require [clojure.test.check :as tc]
3+
[midje.sweet :refer :all]))
4+
5+
(defn holds
6+
"A midje checker to check whether a property \"holds\".
7+
8+
e.g. (fact (tc/quick-check ...) => holds)"
9+
[result]
10+
(= true (:result result)))
11+
12+
(defmacro property
13+
"Make a test.check property into a midje fact."
14+
([descr prop]
15+
`(property ~descr 25 ~prop))
16+
([descr trials prop]
17+
`(fact ~descr
18+
(tc/quick-check ~trials ~prop) => holds)))

0 commit comments

Comments
 (0)