Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>The error you're referring to could be caused, I believe, by having the language level set incorrectly in your "queue.rkt" file. In particular, the language for all three of these should be set to</p> <p>"Use Language Declared in Source".</p> <p>Honestly, I'm really not sure why you're building this as three separate modules; I think it's causing you additional difficulty, but it should certainly be possible to do it this way.</p> <p>Edit: looks like you have paren problems. In particular, you have three close-parens after your definition of 'size'. Does DrRacket not highlight this problem for you when you run?</p> <p>Edit 2: ooh, yucky: you're using "include". Don't use include. </p> <p>Edit 3: Okay, here: I reformatted your code to be in one file:</p> <pre><code>(module queue racket (require rackunit) (provide make-queue enqueue dequeue top size) (struct queue (front back size) #:mutable #:transparent) (define (make-queue) (queue null null 0)) (define (enqueue q elt) (set-queue-back! q (cons elt (queue-back q))) (set-queue-size! q (+ (queue-size q) 1)) ) (define (dequeue q) (cond ((eq? (queue-size q) 0) null) ((null? (queue-front q)) (begin (set-queue-front! q (cdr (reverse (queue-back q)))) (set-queue-back! q null) (set-queue-size! q (- (queue-size q) 1)))) (else (begin (set-queue-front! q (cdr (queue-front q))) (set-queue-size! q (- (queue-size q) 1)))) ) ) (define (top q) (cond ((eq? (queue-size q) 0) null) ((null? (queue-front q)) (last (queue-back q))) (else (car (queue-front q))))) (define (size q) (queue-size q)) (test-case "Initial Queue Properties" (let ((q (make-queue))) (check-equal? (size q) 0 "Queue initially should have size zero.") (check-equal? (dequeue q) null "Dequeue on an empty queue returns null") (check-equal? (size q) 0 "Dequeue on empty queue leaves size as zero") )) (test-case "One Element queue ---- Functional test" (let ((q (make-queue))) (check-equal? (size q) 0 "Stack initially should be of size zero") (enqueue q 1) (check-equal? (size q) 1 "Added one element to back of queue") (check-equal? (top q) 1 "Take a sneak peak at our first element") (dequeue q) (check-equal? (size 1) 0 "size should now be zero") (check-equal? (dequeue q) null "dequeue on empty queue returns null") )) #;(test-case "One Element queue --- Internal Test" (let ((q (make-queue))) (check-equal? (size q) 0 "queue initially should have size zero.") (enqueue q 3) (check-equal? (size q) 1 "Added one element.") (check-equal? (queue-back q) '(3) "Is the element in the back list?") (check-equal? (top s) 3 "Look at our one element.") (check-equal? (queue-front q) '(3) "Is the element in the front list?") (dequeue s) (check-equal? (queue-front q) '() "Is the data empty now?") )) (test-case "Multi Element queue --- Functional Test" (let ((q (make-queue)) (elts (list 8 6 7 5 3 0 9)) ) (check-equal? (size q) 0 "queue initially should have size zero.") (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size.") (check-equal? (top q) i "Testing top with multiple additions.") ) (for ((i (reverse elts)) (num (reverse (stream-&gt;list (in-range 1 8))))) (check-equal? (top q) i "Testing top with multiple deletions") (dequeue q) (check-equal? (size q) (- num 1) "Testing size.") ) )) (test-case "Multi Element queue --- Ebb and Flow Test" (let ((q (make-queue)) (elts (list 8 6 7 5 3 0 9)) ) (check-equal? (size q) 0 "queue initially should have size zero.") (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size, first flow.") (check-equal? (top q) i "Testing top with multiple additions.") ) (for ((i (reverse elts)) (num (reverse (stream-&gt;list (in-range 1 8))))) (check-equal? (top q) i "Testing top with multiple deletions") (dequeue q) (check-equal? (size q) (- num 1) "Testing size, first ebb.") ) (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size, second flow.") (check-equal? (top q) i "Testing top with multiple additions.") ) (for ((i (reverse elts)) (num (reverse (stream-&gt;list (in-range 1 8))))) (check-equal? (top q) i "Testing top with multiple deletions") (dequeue q) (check-equal? (size q) (- num 1) "Testing size, second ebb.") ) )) (test-case "Multi Element queue --- Internal Test" (let ((q (make-queue)) (elts (list 5 8 8 2 3 0 0)) (tmp null) ) (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size, second flow.") (set! tmp (cons i tmp)) ; "push" element to a list (check-equal? (queue-front q) tmp "Queue data is in correct form.") ) )) ) </code></pre> <p>When I run this code, I get a pretty straightforward error in one of your test cases.</p> <p>More generally, I'm taken aback that you would write this much test code without running it :). I would personally have written one small test case and then tried it out, rather than doing all of that work before discovering a more fundamental problem. I admire your tenacity, but I think you need a bit more paranoia :)</p> <p>Let me know if you have more trouble.</p> <p>EDIT: splitting into two files, per your request.</p> <p>File 1: queue.rkt</p> <pre><code>(module queue racket (provide make-queue enqueue dequeue top size) (struct queue (front back size) #:mutable #:transparent) (define (make-queue) (queue null null 0)) (define (enqueue q elt) (set-queue-back! q (cons elt (queue-back q))) (set-queue-size! q (+ (queue-size q) 1))) (define (dequeue q) (cond ((eq? (queue-size q) 0) null) ((null? (queue-front q)) (begin (set-queue-front! q (cdr (reverse (queue-back q)))) (set-queue-back! q null) (set-queue-size! q (- (queue-size q) 1)))) (else (begin (set-queue-front! q (cdr (queue-front q))) (set-queue-size! q (- (queue-size q) 1)))))) (define (top q) (cond ((eq? (queue-size q) 0) null) ((null? (queue-front q)) (last (queue-back q))) (else (car (queue-front q))))) (define (size q) (queue-size q)) ) </code></pre> <p>File 2: queue-tests.rkt, in the same dir:</p> <pre><code>(module test-queue racket (require "queue.rkt" rackunit) (test-case "Initial Queue Properties" (let ((q (make-queue))) (check-equal? (size q) 0 "Queue initially should have size zero.") (check-equal? (dequeue q) null "Dequeue on an empty queue returns null") (check-equal? (size q) 0 "Dequeue on empty queue leaves size as zero") )) (test-case "One Element queue ---- Functional test" (let ((q (make-queue))) (check-equal? (size q) 0 "Stack initially should be of size zero") (enqueue q 1) (check-equal? (size q) 1 "Added one element to back of queue") (check-equal? (top q) 1 "Take a sneak peak at our first element") (dequeue q) (check-equal? (size 1) 0 "size should now be zero") (check-equal? (dequeue q) null "dequeue on empty queue returns null") )) (test-case "One Element queue --- Internal Test" (let ((q (make-queue))) (check-equal? (size q) 0 "queue initially should have size zero.") (enqueue q 3) (check-equal? (size q) 1 "Added one element.") (check-equal? (queue-back q) '(3) "Is the element in the back list?") (check-equal? (top s) 3 "Look at our one element.") (check-equal? (queue-front q) '(3) "Is the element in the front list?") (dequeue s) (check-equal? (queue-front q) '() "Is the data empty now?") )) (test-case "Multi Element queue --- Functional Test" (let ((q (make-queue)) (elts (list 8 6 7 5 3 0 9)) ) (check-equal? (size q) 0 "queue initially should have size zero.") (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size.") (check-equal? (top q) i "Testing top with multiple additions.") ) (for ((i (reverse elts)) (num (reverse (stream-&gt;list (in-range 1 8))))) (check-equal? (top q) i "Testing top with multiple deletions") (dequeue q) (check-equal? (size q) (- num 1) "Testing size.") ) )) (test-case "Multi Element queue --- Ebb and Flow Test" (let ((q (make-queue)) (elts (list 8 6 7 5 3 0 9)) ) (check-equal? (size q) 0 "queue initially should have size zero.") (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size, first flow.") (check-equal? (top q) i "Testing top with multiple additions.") ) (for ((i (reverse elts)) (num (reverse (stream-&gt;list (in-range 1 8))))) (check-equal? (top q) i "Testing top with multiple deletions") (dequeue q) (check-equal? (size q) (- num 1) "Testing size, first ebb.") ) (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size, second flow.") (check-equal? (top q) i "Testing top with multiple additions.") ) (for ((i (reverse elts)) (num (reverse (stream-&gt;list (in-range 1 8))))) (check-equal? (top q) i "Testing top with multiple deletions") (dequeue q) (check-equal? (size q) (- num 1) "Testing size, second ebb.") ) )) (test-case "Multi Element queue --- Internal Test" (let ((q (make-queue)) (elts (list 5 8 8 2 3 0 0)) (tmp null) ) (for ((i elts) (num (in-range 1 8))) (enqueue q i) (check-equal? (size q) num "Testing size, second flow.") (set! tmp (cons i tmp)) ; "push" element to a list (check-equal? (queue-front q) tmp "Queue data is in correct form.") ) ))) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload