001/*
002 * Copyright 2020 Global Biodiversity Information Facility (GBIF)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.gbif.api.vocabulary;
017
018import org.junit.jupiter.api.Test;
019
020import static org.junit.jupiter.api.Assertions.assertEquals;
021import static org.junit.jupiter.api.Assertions.assertFalse;
022import static org.junit.jupiter.api.Assertions.assertTrue;
023
024public class RankTest {
025
026  @Test
027  public void testIsInfraspecific() {
028    assertFalse(Rank.SUPERFAMILY.isInfraspecific());
029    assertFalse(Rank.KINGDOM.isInfraspecific());
030    assertFalse(Rank.INFRAGENERIC_NAME.isInfraspecific());
031    assertFalse(Rank.GENUS.isInfraspecific());
032    assertFalse(Rank.SPECIES.isInfraspecific());
033    assertTrue(Rank.SUBFORM.isInfraspecific());
034    assertTrue(Rank.STRAIN.isInfraspecific());
035    assertTrue(Rank.CULTIVAR.isInfraspecific());
036    assertTrue(Rank.VARIETY.isInfraspecific());
037    assertTrue(Rank.PATHOVAR.isInfraspecific());
038    for (Rank r : Rank.values()) {
039      if (r.isRestrictedToCode() == NomenclaturalCode.BACTERIAL)
040      assertTrue(r.isInfraspecific());
041    }
042  }
043
044  @Test
045  public void testIsLinnean2() {
046    for (Rank r : Rank.values()) {
047      System.out.print("'"+r.name()+"', ");
048    }
049
050  }
051  @Test
052  public void testIsLinnean() {
053    assertTrue(Rank.KINGDOM.isLinnean());
054    assertTrue(Rank.PHYLUM.isLinnean());
055    assertTrue(Rank.CLASS.isLinnean());
056    assertTrue(Rank.ORDER.isLinnean());
057    assertTrue(Rank.FAMILY.isLinnean());
058    assertTrue(Rank.GENUS.isLinnean());
059    assertTrue(Rank.SPECIES.isLinnean());
060    assertFalse(Rank.SUBSECTION.isLinnean());
061    assertFalse(Rank.SUBGENUS.isLinnean());
062    assertFalse(Rank.SUPERFAMILY.isLinnean());
063    assertFalse(Rank.INFRAGENERIC_NAME.isLinnean());
064    assertFalse(Rank.PATHOVAR.isLinnean());
065    assertFalse(Rank.CHEMOFORM.isLinnean());
066  }
067
068  @Test
069  public void testIsDwC() {
070    assertTrue(Rank.DWC_RANKS.contains(Rank.KINGDOM));
071    assertTrue(Rank.DWC_RANKS.contains(Rank.PHYLUM));
072    assertTrue(Rank.DWC_RANKS.contains(Rank.CLASS));
073    assertTrue(Rank.DWC_RANKS.contains(Rank.ORDER));
074    assertTrue(Rank.DWC_RANKS.contains(Rank.FAMILY));
075    assertTrue(Rank.DWC_RANKS.contains(Rank.GENUS));
076    assertTrue(Rank.DWC_RANKS.contains(Rank.SUBGENUS));
077    assertTrue(Rank.DWC_RANKS.contains(Rank.SPECIES));
078  }
079
080  @Test
081  public void testIsSpeciesOrBelow() {
082    assertFalse(Rank.SUPERFAMILY.isSpeciesOrBelow());
083    assertFalse(Rank.KINGDOM.isSpeciesOrBelow());
084    assertFalse(Rank.INFRAGENERIC_NAME.isSpeciesOrBelow());
085    assertFalse(Rank.GENUS.isSpeciesOrBelow());
086    assertTrue(Rank.SPECIES.isSpeciesOrBelow());
087    assertTrue(Rank.SUBFORM.isSpeciesOrBelow());
088    assertTrue(Rank.STRAIN.isSpeciesOrBelow());
089    assertTrue(Rank.CULTIVAR.isSpeciesOrBelow());
090    assertTrue(Rank.VARIETY.isSpeciesOrBelow());
091    assertTrue(Rank.PATHOVAR.isSpeciesOrBelow());
092    assertTrue(Rank.NATIO.isSpeciesOrBelow());
093    assertTrue(Rank.GREX.isSpeciesOrBelow());
094  }
095
096  @Test
097  public void testIsLegacy() {
098    assertTrue(Rank.NATIO.isLegacy());
099    assertTrue(Rank.PROLES.isLegacy());
100  }
101
102  @Test
103  public void testIsInfrageneric() {
104    assertFalse(Rank.SUPERFAMILY.isInfrageneric());
105    assertFalse(Rank.FAMILY.isInfrageneric());
106    assertFalse(Rank.SUPRAGENERIC_NAME.isInfrageneric());
107    assertFalse(Rank.SUBFAMILY.isInfrageneric());
108    assertFalse(Rank.TRIBE.isInfrageneric());
109    assertFalse(Rank.GENUS.isInfrageneric());
110
111    assertTrue(Rank.SUBGENUS.isInfrageneric());
112    assertTrue(Rank.INFRAGENERIC_NAME.isInfrageneric());
113    assertTrue(Rank.SPECIES.isInfrageneric());
114    assertTrue(Rank.SUBFORM.isInfrageneric());
115    assertTrue(Rank.STRAIN.isInfrageneric());
116    assertTrue(Rank.CULTIVAR.isInfrageneric());
117    assertTrue(Rank.VARIETY.isInfrageneric());
118  }
119
120  @Test
121  public void testIsSuprageneric() {
122    assertTrue(Rank.SUPERFAMILY.isSuprageneric());
123    assertTrue(Rank.KINGDOM.isSuprageneric());
124    assertTrue(Rank.PHYLUM.isSuprageneric());
125    assertTrue(Rank.SUPERFAMILY.isSuprageneric());
126    assertTrue(Rank.SUPRAGENERIC_NAME.isSuprageneric());
127    assertTrue(Rank.TRIBE.isSuprageneric());
128    assertTrue(Rank.SUBFAMILY.isSuprageneric());
129    assertFalse(Rank.INFRAGENERIC_NAME.isSuprageneric());
130    assertFalse(Rank.GENUS.isSuprageneric());
131    assertFalse(Rank.SPECIES.isSuprageneric());
132    assertFalse(Rank.SUBFORM.isSuprageneric());
133    assertFalse(Rank.STRAIN.isSuprageneric());
134    assertFalse(Rank.CULTIVAR.isSuprageneric());
135    assertFalse(Rank.VARIETY.isSuprageneric());
136  }
137
138  @Test
139  public void testIsUncomparable() {
140    assertFalse(Rank.KINGDOM.isUncomparable());
141    assertFalse(Rank.PHYLUM.isUncomparable());
142    assertFalse(Rank.CLASS.isUncomparable());
143    assertFalse(Rank.ORDER.isUncomparable());
144    assertFalse(Rank.FAMILY.isUncomparable());
145    assertFalse(Rank.GENUS.isUncomparable());
146    assertFalse(Rank.SPECIES.isUncomparable());
147    assertFalse(Rank.SUBSECTION.isUncomparable());
148    assertFalse(Rank.SUBGENUS.isUncomparable());
149    assertFalse(Rank.SUPERFAMILY.isUncomparable());
150    assertTrue(Rank.INFRAGENERIC_NAME.isUncomparable());
151  }
152
153  @Test
154  public void testHigher() {
155    assertFalse(Rank.SUPERFAMILY.higherThan(Rank.KINGDOM));
156    assertFalse(Rank.SUPERFAMILY.higherThan(Rank.KINGDOM));
157    assertFalse(Rank.SPECIES.higherThan(Rank.SUBGENUS));
158
159    assertTrue(Rank.INFRASPECIFIC_NAME.higherThan(Rank.VARIETY));
160    assertTrue(Rank.SUPERFAMILY.higherThan(Rank.FAMILY));
161    assertTrue(Rank.SPECIES.higherThan(Rank.VARIETY));
162    assertTrue(Rank.GENUS.higherThan(Rank.INFRAGENERIC_NAME));
163
164    int expectedHigher = Rank.DWC_RANKS.size() - 1;
165    for (Rank r : Rank.DWC_RANKS) {
166      int higherCount = 0;
167      for (Rank r2 : Rank.DWC_RANKS) {
168        if (r.higherThan(r2)) {
169          higherCount++;
170        }
171      }
172      assertEquals(expectedHigher, higherCount);
173      expectedHigher--;
174    }
175
176    // questionable
177    assertFalse(Rank.UNRANKED.higherThan(Rank.VARIETY));
178  }
179
180}