2015-02-21 3 views
0

Я определяю запечатанную форму формы с классом case Point и LineSegment и должен иметь поведение для класса LineSegment, который говорит мне, пересекаются ли две линии LineSegments, однако, когда я пытаюсь проверить это поведение .. он говорит, что не может узнайте его в наборе тестов.Тест классов ящиков Scala

sealed trait Shape 
case class Point(x: Int, y: Int) extends Shape { 
//require(x != null & y !=null, "null values for point") 
} 

case class LineSegment(point1: Point, point2: Point) extends Shape { 
require(point1 != point2) 

def intersect(lineSegment1: LineSegment, lineSegment2:LineSegment): 
Boolean ={ 
// val A1, A2, B1, B2, C1, C2 
val A1 = lineSegment1.point2.y - lineSegment1.point1.y 
val B1 = lineSegment1.point1.x - lineSegment1.point2.x 
val C1 = A1 * lineSegment1.point1.x + B1 * lineSegment1.point1.y 

val A2 = lineSegment2.point2.y - lineSegment2.point1.y 
val B2 = lineSegment2.point1.x - lineSegment2.point2.x 
val C2 = A2 * lineSegment2.point1.x + B2 * lineSegment2.point1.y 

val det = A1 * B2 - A2 * B1 
if(det == 0) 
    return false 
else 
    return true 

} 

} 

Это тест, который я пытаюсь сделать

import model.Point 
import model.LineSegment 
import org.scalatest.{FlatSpec, ShouldMatchers} 

class LineIntersectionTest extends FlatSpec with ShouldMatchers{ 
val point1 = Point(20,30); 
val point2 = Point(10,35); 
val point3 = Point(100,10); 
val point4 = Point(16,45); 

val lineSegment1 = LineSegment(point1,point2); 
val lineSegment2 = LineSegment(point3,point4); 

    "LineSegmentIntersection Behaviour" should "work for a line segment" 
    in { 
    intersect(lineSegment1, lineSegment2) should be (true) 
    }} 

, но я получаю сообщение об ошибке не может разрешить символ пересекаться, не может разрешить символ должен .. это не узнавая метод пересекаться

, что я делаю неправильно здесь?

ответ

2

Вы используете intersect, как если бы это была функция класса LineIntersectionTest. Должно быть выполнено следующее:

lineSegment1.intersect(lineSegment1, lineSegment2) should be (true) 

Однако я, вероятно, использовал бы другую реализацию. Возможно:

object LineUtils { 
    def intersect(l1: LineSegment, l2: LineSegment): Boolean 
} 

// Usage 
LineUtils.insersect(lineSegment1, lineSegment2) 
+0

Хорошо с этим. Но, следуя OO, лучшему aproach дается линии ответ, чтобы знать, пересекается ли она с другой строкой. – heat

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