2014-09-03 3 views
1

Я пытаюсь проверить класс java с помощью scalacheck. Например, у меня есть очереди класса внутри ... \ SRC \ главный \ Java \Испытайте классы java с помощью ScalaCheck

public class Queue<Item> { 

private Node first; 
private Node last; 
private int N; 

private class Node { 
    Item item; 
    Node next; 
} 

public boolean isEmpty() { return first == null; } 
public int size() { return N;} 

public void enqueue(Item item) { 
    Node oldLast = last; 
    last = new Node(); 
    last.item = item; 
    last.next = null; 
    if(isEmpty()) 
     first = last; 
    else 
     oldLast = last; 
    N++; 
} 

public Item dequeue() { 
    Item item = first.item; 
    first = first.next; 
    if(isEmpty()) 
     last = null; 
    N--; 
    return item; 
} 

}

Тогда у меня есть тестовый класс QueueTest.scala Scala внутри ... \ SRC \ Test \ scala \

import org.scalacheck.Gen.{choose, oneOf} 
import org.scalacheck.Prop.forAll 
import org.scalacheck.Gen.choose 
import org.scalacheck._ 
import org.scalacheck.Prop._ 

class QueueTest extends Properties("Queue") { 

    Queue<Int> q; 

    property("enque") = Prop.forAll { (n: Int) => 
     (q.enque(n) == n) 
    } 
} 

Мне просто нужно начать работу над расширением класса Queue класса java? Все, что я пытаюсь сделать, это проверить методы очереди и деактивации.

Я посмотрел пример StringUtils.scala из github Рика Ниллсона, но он все еще не ясен.

Любые предложения будут оценены

+0

Вот полный код, который я пытаясь проверить. http://introcs.cs.princeton.edu/java/43stack/Queue.java.html – 3ek

ответ

1

Единственный возможный тест для enque это вызвать его и убедитесь, что не бросает исключение.

Если бы это было мое задание, я бы определил свойство для всех List[Int] и проверил выдачу и удаление объектов из этого произвольного списка, так что очередь возвращает точно такие же элементы в том же порядке, что и список.


В соответствии с просьбой, вот некоторые примеры:

import org.scalacheck.Properties 
import org.scalacheck.Prop.forAll 

object QueueSpec extends Properties("Queue") { 

    property("enqueue never throws an exception") = forAll {(xs: List[Int]) => 
    val q = new Queue[Int] 
    xs.foreach(q.enqueue) 
    true 
    } 

    property("dequeue always presents elements in FIFO order") = forAll {(xs: List[Int]) => 
    val q = new Queue[Int] 
    xs.foreach(q.enqueue) 
    xs.forall{_ == q.dequeue} 
    } 

    property("isEmpty always true after complete dequeue") = forAll {(xs: List[Int]) => 
    val q = new Queue[Int] 
    xs.foreach(q.enqueue) 
    xs.foreach(_ => q.dequeue) 
    q.isEmpty 
    } 
} 

build.sbt:

scalaVersion := "2.11.2" 

libraryDependencies ++= Seq(
    "org.scalacheck" %% "scalacheck" % "1.11.5" % "test" 
) 

результат:

$ sbt test 
[info] + Queue.enqueue never throws an exception: OK, passed 100 tests. 
[info] + Queue.dequeue always presents elements in FIFO order: OK, passed 100 tests. 
[info] + Queue.isEmpty always true after complete dequeue: OK, passed 100 tests. 
[info] Passed: Total 3, Failed 0, Errors 0, Passed 3 
[success] Total time: 2 s, completed 24/09/2014 9:28:10 PM 
+0

Не могли бы вы привести мне пример? Это полный класс Queue, который я пытаюсь написать тесты против http://introcs.cs.princeton.edu/java/43stack/Queue.java.html – 3ek

+0

Приведенный пример @ 3ek – Synesso

+0

Спасибо Synesso. Это именно то, что я искал. – 3ek

 Смежные вопросы

  • Нет связанных вопросов^_^