# Rackcheck question: How to name a property?

**URL:** <https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484>\
**Category:** Questions & Answers\
**Created:** [December 28, 2021, 9:20am UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484 "2021-12-28T09:20:22Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![danprager](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/danprager/32/279_2.png) [@danprager](https://racket.discourse.group/u/danprager)\
**Post date:** [December 28, 2021, 9:20am UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/1 "2021-12-28T09:20:22Z")

</div>

I've just started using @bogdan's nice property-testing package rackcheck (includes shrinking!), and I can't figure out the syntax for adding a name to a property.

I'd like to give a name to my property ahead of adding more properties.

How do I do that?

Really liking the package:

- I TDD-ed some tricky code, and wanted more checking to find uncovered cases, which it did
- Suggestion: some examples in the Scribble documentation

Dan

```scheme
 (define gen:segment
    (gen:let ([x (gen:integer-in -9999 9999)]
              [w (gen:integer-in 0 9999)])
      (segment x (+ x w))))

  (check-property
   (make-config #:tests 10000)
   (property ([s1 gen:segment]
              [s2 gen:segment])
     (check-equal? (segment-split s1 s2)
                   (reverse (segment-split s2 s1)))))

```

---

<div class="post-metadata">

**Author:** ![bogdan](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bogdan/32/8_2.png) [@bogdan](https://racket.discourse.group/u/bogdan)\
**Post date:** [December 28, 2021, 12:07pm UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/2 "2021-12-28T12:07:05Z")

</div>

The `property` form takes an optional name in the first position, so you can change your code to:

```scheme
  (check-property
   (make-config #:tests 10000)
   (property example-prop
     ([s1 gen:segment]
      [s2 gen:segment])
     (check-equal? (segment-split s1 s2)
                   (reverse (segment-split s2 s1)))))

```

Alternatively, you can use `define-property`, which binds the property to a variable and names it:

```scheme
(define-property example-prop
  ([s1 gen:segment]
   [s2 gen:segment])
  (check-equal? (segment-split s1 s2)
                (reverse (segment-split s2 s1)))

(check-property (make-config #:tests 10000) example-prop)

```

---

<div class="post-metadata">

**Author:** ![danprager](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/danprager/32/279_2.png) [@danprager](https://racket.discourse.group/u/danprager)\
**Post date:** [December 29, 2021, 12:19am UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/3 "2021-12-29T00:19:55Z")

</div>

Thanks Bogdan

I also figured out how to use the #:name option to give a string description:

```scheme
   (property #:name "argument symmetry"
             ([s1 gen:segment]
              [s2 gen:segment]) 
             (check-equal? (segment-split s1 s2)
                           (reverse (segment-split s2 s1))))

```

Thanks for making this!

One other question, with the shrink behaviour for gen:integer-in, would it be preferable to have it shrink towards 0 rather than the lower bound when 0 is within the range?

Dan

---

<div class="post-metadata">

**Author:** ![bogdan](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bogdan/32/8_2.png) [@bogdan](https://racket.discourse.group/u/bogdan)\
**Post date:** [December 29, 2021, 7:59am UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/4 "2021-12-29T07:59:01Z")

</div>

It's been a while since I've looked at the implementation, but I think the individual shrink trees for `gen:integer-in` already shrink toward zero. The error reporting code doesn't walk all the trees to avoid spending a lot of time shrinking, so it might sometimes choose a path that doesn't have 0 in it. I'll see about improving the ordering to make a hit on 0 more likely.

---

<div class="post-metadata">

**Author:** ![danprager](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/danprager/32/279_2.png) [@danprager](https://racket.discourse.group/u/danprager)\
**Post date:** [December 29, 2021, 10:12pm UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/5 "2021-12-29T22:12:26Z")

</div>

Here's a minimal example:

```scheme
  (define (F n) #f)

  (check-property
   (property ([n (gen:integer-in -9999 9999)])
             (check-equal? (F n) #t)))

--------------------
FAILURE
name: unnamed
seed: 1389238784
actual: #f
expected: #t

Failed after 1 tests:

  n = -6979

Shrunk:

  n = -9999

--------------------

```

---

<div class="post-metadata">

**Author:** ![bogdan](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bogdan/32/8_2.png) [@bogdan](https://racket.discourse.group/u/bogdan)\
**Post date:** [December 30, 2021, 9:51am UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/6 "2021-12-30T09:51:38Z")

</div>

I've pushed a fix. It should show up on the package server in a few hours.

---

<div class="post-metadata">

**Author:** ![danprager](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/danprager/32/279_2.png) [@danprager](https://racket.discourse.group/u/danprager)\
**Post date:** [December 31, 2021, 7:41am UTC](https://racket.discourse.group/t/rackcheck-question-how-to-name-a-property/484/7 "2021-12-31T07:41:06Z")

</div>

Nice - works for me!

Thanks for the enhancement and happy new year.
