@@ -584,8 +584,50 @@ func TestPolylineInterpolate(t *testing.T) {
584
584
}
585
585
}
586
586
587
+ func TestPolylineUninterpolate (t * testing.T ) {
588
+ vertices := []Point {PointFromCoords (1 , 0 , 0 )}
589
+ line := Polyline (vertices )
590
+ if got , want := line .Uninterpolate (PointFromCoords (0 , 1 , 0 ), 1 ), 0.0 ; ! float64Eq (got , want ) {
591
+ t .Errorf ("Uninterpolate on a polyline with 2 or fewer vertices should return 0, got %v" , got )
592
+ }
593
+
594
+ vertices = append (vertices ,
595
+ PointFromCoords (0 , 1 , 0 ),
596
+ PointFromCoords (0 , 1 , 1 ),
597
+ PointFromCoords (0 , 0 , 1 ),
598
+ )
599
+ line = Polyline (vertices )
600
+
601
+ interpolated , nextVertex := line .Interpolate (- 0.1 )
602
+ if got , want := line .Uninterpolate (interpolated , nextVertex ), 0.0 ; ! float64Eq (got , want ) {
603
+ t .Errorf ("line.Uninterpolate(%v, %d) = %v, want %v" , interpolated , nextVertex , got , want )
604
+ }
605
+ interpolated , nextVertex = line .Interpolate (0.0 )
606
+ if got , want := line .Uninterpolate (interpolated , nextVertex ), 0.0 ; ! float64Eq (got , want ) {
607
+ t .Errorf ("line.Uninterpolate(%v, %d) = %v, want %v" , interpolated , nextVertex , got , want )
608
+ }
609
+ interpolated , nextVertex = line .Interpolate (0.5 )
610
+ if got , want := line .Uninterpolate (interpolated , nextVertex ), 0.5 ; ! float64Eq (got , want ) {
611
+ t .Errorf ("line.Uninterpolate(%v, %d) = %v, want %v" , interpolated , nextVertex , got , want )
612
+ }
613
+ interpolated , nextVertex = line .Interpolate (0.75 )
614
+ if got , want := line .Uninterpolate (interpolated , nextVertex ), 0.75 ; ! float64Eq (got , want ) {
615
+ t .Errorf ("line.Uninterpolate(%v, %d) = %v, want %v" , interpolated , nextVertex , got , want )
616
+ }
617
+ interpolated , nextVertex = line .Interpolate (1.1 )
618
+ if got , want := line .Uninterpolate (interpolated , nextVertex ), 1.0 ; ! float64Eq (got , want ) {
619
+ t .Errorf ("line.Uninterpolate(%v, %d) = %v, want %v" , interpolated , nextVertex , got , want )
620
+ }
621
+
622
+ // Check that the return value is clamped to 1.0.
623
+ if got , want := line .Uninterpolate (PointFromCoords (0 , 1 , 0 ), len (line )), 1.0 ; ! float64Eq (got , want ) {
624
+ t .Errorf ("line.Uninterpolate(%v, %d) = %v, want %v" , PointFromCoords (0 , 1 , 0 ), len (line ), got , want )
625
+ }
626
+ }
627
+
587
628
// TODO(roberts): Test differences from C++:
588
- // UnInterpolate
629
+ // InitToSnapped
630
+ // InitToSimplified
589
631
//
590
632
// PolylineCoveringTest
591
633
// PolylineOverlapsSelf
0 commit comments