} // IntersectionPeriods

        // ----------------------------------------------------------------------
        public virtual ITimePeriodCollection RelationPeriods(ITimePeriod test, PeriodRelation relation)
        {
            if (test == null)
            {
                throw new ArgumentNullException("test");
            }

            TimePeriodCollection relationPeriods = new TimePeriodCollection();

            foreach (ITimePeriod period in periods)
            {
                if (test.GetRelation(period) == relation)
                {
                    relationPeriods.Add(period);
                }
            }

            return(relationPeriods);
        } // RelationPeriods
        } // IntersectionPeriods

        // ----------------------------------------------------------------------
        public virtual ITimePeriodCollection RelationPeriods(ITimePeriod test, List <PeriodRelation> relation)
        {
            if (test == null)
            {
                throw new ArgumentNullException("test");
            }

            TimePeriodCollection relationPeriods = new TimePeriodCollection();

            foreach (ITimePeriod period in periods)
            {
                var set1 = new HashSet <PeriodRelation> (test.GetRelation(period));
                var set2 = new HashSet <PeriodRelation> (relation);
                if (set1.Equals(set2))
                {
                    relationPeriods.Add(period);
                }
            }

            return(relationPeriods);
        } // RelationPeriods
        // ----------------------------------------------------------------------
        public virtual ITimePeriodCollection RelationPeriods( ITimePeriod test, PeriodRelation relation )
        {
            if ( test == null )
            {
                throw new ArgumentNullException( "test" );
            }

            TimePeriodCollection relationPeriods = new TimePeriodCollection();

            foreach ( ITimePeriod period in periods )
            {
                if ( test.GetRelation( period ) == relation )
                {
                    relationPeriods.Add( period );
                }
            }

            return relationPeriods;
        }