<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Do you know if there is an implementation?<br>
    <br>
    <div class="moz-cite-prefix">On 02/17/2015 03:15 AM, Paul Brauner
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAJ32BF4kY0LAqhJmnwzc0tQXdEg3iwJT4oRzVE=LYFJe=VvQhg@mail.gmail.com"
      type="cite">
      <p dir="ltr">There's a recent paper by Jonas Duregård et al where
        they introduce a variant of feat that allows for efficient
        discarding of unwanted values, à la lazy Smallcheck. The
        motivating example of the paper is exactly what you're looking
        for: discarding ill-formed programs.</p>
      <br>
      <div class="gmail_quote">On Mon, Feb 16, 2015, 19:44 Andrey
        Chudnov <<a moz-do-not-send="true"
          href="mailto:achudnov@gmail.com">achudnov@gmail.com</a>>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">
          <div bgcolor="#FFFFFF" text="#000000"> If you just need an
            example for generating and shrinking arbitrary ASTs, you can
            have a look here: <a moz-do-not-send="true"
href="https://github.com/jswebtools/language-ecmascript/blob/master/src/Language/ECMAScript3/Syntax/Arbitrary.hs"
              target="_blank">https://github.com/jswebtools/language-ecmascript/blob/master/src/Language/ECMAScript3/Syntax/Arbitrary.hs</a>
            . Note that I use the testing-feat package to generate Gen
            instances --- it tends to do better (explore interesting
            cases earlier) than handwritten code --- and then fix-up
            incorrect ASTs (another option is to simply discard them).</div>
          <div bgcolor="#FFFFFF" text="#000000"><br>
            <br>
            <div>On 02/16/2015 12:33 PM, Maurizio Vitale wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">By 'test size reduction' I mean the
                'shrink' function. It seems to me (as I said, first
                Haskell program and no experience with quickcheck) that
                it works nicely with a topdown generation of the test,
                but I don't see how to easily generate correct programs
                that way.
                <div><br>
                </div>
                <div>Even if you cannot release your tests, maybe you
                  can help me with a very simple case. Consider a
                  trivial AST. A program is a possibly nested block.
                  Each block is a bunch of declarations of variables and
                  some use of them</div>
                <div><br>
                </div>
                <blockquote style="margin:0 0 0
                  40px;border:none;padding:0px">
                  <div>
                    <div>data Block = Block [Declaration] [Statement]</div>
                  </div>
                  <div>
                    <div><br>
                    </div>
                  </div>
                  <div>
                    <div>data Declaration = Var String String</div>
                  </div>
                  <div>
                    <div><br>
                    </div>
                  </div>
                  <div>
                    <div>data Statement = Statement Block | Use String</div>
                  </div>
                </blockquote>
                <div><br>
                </div>
                <div>How one would generate things like:</div>
                <div><br>
                </div>
                <blockquote style="margin:0 0 0
                  40px;border:none;padding:0px">
                  <div>Block [Var "a" "int"] [Use "a"] -- here a is
                    declared in the same block</div>
                  <div><br>
                  </div>
                  <div>Block [] [Statement Block [Var "s" "int"]
                    [Statement Block [] [Use "s"]]] -- here s is
                    declared in some other visible scope</div>
                </blockquote>
                <div><br>
                </div>
                <div>etc.</div>
                <div><br>
                </div>
                <div>Or am I trying to approach the problem from the
                  wrong angle?</div>
                <div><br>
                </div>
                <div> </div>
              </div>
              <div class="gmail_extra"><br>
                <div class="gmail_quote">On Mon, Feb 16, 2015 at 12:02
                  PM, Andrey Chudnov <span dir="ltr"><<a
                      moz-do-not-send="true"
                      href="mailto:achudnov@gmail.com" target="_blank">achudnov@gmail.com</a>></span>
                  wrote:<br>
                  <blockquote class="gmail_quote" style="margin:0 0 0
                    .8ex;border-left:1px #ccc solid;padding-left:1ex">
                    <div bgcolor="#FFFFFF" text="#000000"> I use
                      QuichCheck for compiler testing where I generate
                      random, but well-formed programs and check some
                      high-level syntactic properties on results. The
                      QuickCheck instance is open-source (see
                      language-ecmascript), but the compiler-test code
                      is closed-source at this time. Still, I found that
                      it's not the ultimate answer: many properties are
                      hard to formalize, so I have to resort to unit
                      tests. I'm not sure what you mean by "how this
                      would play with test size reduction". I think it's
                      worth giving a try, but keep in mind that you
                      might still need to use unit tests.<br>
                      <br>
                      Let me know if you have any questions.<br>
                      <br>
                      /Andrey
                      <div>
                        <div><br>
                          <br>
                          <div>On 02/16/2015 11:53 AM, Maurizio Vitale
                            wrote:<br>
                          </div>
                        </div>
                      </div>
                      <blockquote type="cite">
                        <div>
                          <div>
                            <div dir="ltr">I'm starting to work on my
                              first real haskell program (I've only RWH
                              exercises under my belt) and wondering
                              whether people use quickcheck at all for
                              compiler testing.
                              <div><br>
                              </div>
                              <div>I've seen uses of quickcheck for
                                testing parsers, but I'm interested in
                                generating well-formed programs (e.g.
                                random programs with all declarations in
                                reasonable random places). This could be
                                used to test passes other than parsing
                                (or even parsing, for languages that
                                needs to distinguish identifiers, like
                                the 'typedef' problem in C/C++).</div>
                              <div><br>
                              </div>
                              <div>The only thing I can think of, is to
                                use quickcheck for randomly generating
                                statements, go over them and figure out
                                free variables (incl. functions) and
                                generate declarations in random places
                                for them. But I'm not sure how this
                                would play with test size reduction and
                                doesn't look like a nice solution
                                anyhow.</div>
                              <div><br>
                              </div>
                              <div>Any idea or pointers to examples? or
                                should I give up on quickcheck for this
                                and just do direct testing?</div>
                              <div><br>
                              </div>
                              <div>Thanks,</div>
                              <div><br>
                              </div>
                              <div>  Maurizio</div>
                            </div>
                            <br>
                            <fieldset></fieldset>
                            <br>
                          </div>
                        </div>
                        <pre>_______________________________________________
Haskell-Cafe mailing list
<a moz-do-not-send="true" href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a>
<a moz-do-not-send="true" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
</pre>
                      </blockquote>
                      <br>
                    </div>
                    <br>
                    _______________________________________________<br>
                    Haskell-Cafe mailing list<br>
                    <a moz-do-not-send="true"
                      href="mailto:Haskell-Cafe@haskell.org"
                      target="_blank">Haskell-Cafe@haskell.org</a><br>
                    <a moz-do-not-send="true"
                      href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
                      target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
                    <br>
                  </blockquote>
                </div>
                <br>
              </div>
            </blockquote>
            <br>
          </div>
          _______________________________________________<br>
          Haskell-Cafe mailing list<br>
          <a moz-do-not-send="true"
            href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
          <a moz-do-not-send="true"
            href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
            target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>