package com.es.scala.chapter06

import org.specs2.mutable.Specification

class SetTest6 extends Specification {
  "com.es.scala.chapter06.IntSet6" should {
    "verify that no element belongs to EmptySet" in {
      new EmptySet6().contains(1) must beFalse
    }
    "verify that correct elements belong to NonEmptySet" in {
      val set = new EmptySet6
      val set1 = set.incl(3)
      set1.contains(1) must beFalse
      set1.contains(3) must beTrue
    }
    "verify that union works as expected" in {
      val set = new EmptySet6
      val set1 = set.incl(3).incl(5).incl(1)
      val set2 = set.incl(4).incl(2)
      val set3 = set1.union(set2)
      set3.contains(1) must beTrue
      set3.contains(2) must beTrue
      set3.contains(3) must beTrue
      set3.contains(4) must beTrue
      set3.contains(5) must beTrue
    }
    "verify that intersection works as expected" in {
      val set = new EmptySet6
      val set1 = set.incl(1).incl(3).incl(4).incl(5)
      println("set1 = " + set1.toString)
      val set2 = set.incl(3).incl(4)
      println("set2 = " + set2.toString)
      val set3 = set1.intersection(set2)
      println("set3 = " + set3.toString)
      println("")
      set3.contains(1) must beFalse
      set3.contains(2) must beFalse
      set3.contains(3) must beTrue
      set3.contains(4) must beTrue
      set3.contains(5) must beFalse
      set3.intersection(set).contains(1) must beFalse
    }
  }
}