1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package libcore.android.system; 18 19import android.system.StructTimespec; 20 21import junit.framework.TestCase; 22 23/** 24 * Unit test for {@link StructTimespec} 25 */ 26public class StructTimespecTest extends TestCase { 27 public void testConstructor() { 28 StructTimespec val = new StructTimespec(Long.MIN_VALUE, 0); 29 assertEquals(Long.MIN_VALUE, val.tv_sec); 30 assertEquals(0, val.tv_nsec); 31 32 val = new StructTimespec(-23, 23); 33 assertEquals(-23, val.tv_sec); 34 assertEquals(23, val.tv_nsec); 35 36 val = new StructTimespec(0, 42); 37 assertEquals(0, val.tv_sec); 38 assertEquals(42, val.tv_nsec); 39 40 val = new StructTimespec(23, 91); 41 assertEquals(23, val.tv_sec); 42 assertEquals(91, val.tv_nsec); 43 44 val = new StructTimespec(Long.MAX_VALUE, 999_999_999); 45 assertEquals(Long.MAX_VALUE, val.tv_sec); 46 assertEquals(999_999_999, val.tv_nsec); 47 } 48 49 public void testConstructorInvalidNsec() { 50 try { 51 new StructTimespec(0, 1_000_000_000); 52 fail(); 53 } catch (IllegalArgumentException e) { 54 // expected 55 } 56 57 try { 58 new StructTimespec(0, -1); 59 fail(); 60 } catch (IllegalArgumentException e) { 61 // expected 62 } 63 } 64 65 public void testCompare() { 66 StructTimespec[] specs = new StructTimespec[]{new StructTimespec(Long.MIN_VALUE, 0), 67 new StructTimespec(-24, 91), 68 new StructTimespec(-23, 23), 69 new StructTimespec(0, 41), 70 new StructTimespec(0, 42), 71 new StructTimespec(22, 91), 72 new StructTimespec(23, 23), 73 new StructTimespec(24, 91), 74 new StructTimespec(Long.MAX_VALUE, 999_999_999)}; 75 76 for (int a = 0; a < specs.length; a++) { 77 for (int b = 0; b < specs.length; b++) { 78 if (a < b) { 79 assertTrue(a + "<" + b, specs[a].compareTo(specs[b]) < 0); 80 } else if (a == b) { 81 assertTrue(a + "==" + b, specs[a].compareTo(specs[b]) == 0); 82 } else { 83 assertTrue(a + ">" + b, specs[a].compareTo(specs[b]) > 0); 84 } 85 } 86 } 87 } 88 89 public void testEquals() { 90 StructTimespec allZero1 = new StructTimespec(0, 0); 91 StructTimespec allZero2 = new StructTimespec(0, 0); 92 93 StructTimespec val1 = new StructTimespec(23, 42); 94 StructTimespec val2 = new StructTimespec(23, 42); 95 96 StructTimespec secZero1 = new StructTimespec(0, 42); 97 StructTimespec secZero2 = new StructTimespec(0, 42); 98 99 StructTimespec nsecZero1 = new StructTimespec(23, 0); 100 StructTimespec nsecZero2 = new StructTimespec(23, 0); 101 102 assertTrue(allZero1.equals(allZero2)); 103 assertTrue(val1.equals(val2)); 104 assertTrue(secZero1.equals(secZero2)); 105 assertTrue(nsecZero1.equals(nsecZero2)); 106 107 // Compare equals in both directions 108 assertFalse(allZero1.equals(val1)); 109 assertFalse(allZero1.equals(secZero1)); 110 assertFalse(allZero1.equals(nsecZero1)); 111 112 assertFalse(val1.equals(secZero1)); 113 assertFalse(val1.equals(nsecZero1)); 114 assertFalse(val1.equals(allZero1)); 115 116 assertFalse(secZero1.equals(nsecZero1)); 117 assertFalse(secZero1.equals(allZero1)); 118 assertFalse(secZero1.equals(val1)); 119 120 assertFalse(nsecZero1.equals(allZero1)); 121 assertFalse(nsecZero1.equals(val1)); 122 assertFalse(nsecZero1.equals(secZero1)); 123 } 124 125 public void testHashcode() { 126 StructTimespec allZero1 = new StructTimespec(0, 0); 127 StructTimespec allZero2 = new StructTimespec(0, 0); 128 129 StructTimespec val1 = new StructTimespec(23, 42); 130 StructTimespec val2 = new StructTimespec(23, 42); 131 132 StructTimespec secZero1 = new StructTimespec(0, 42); 133 StructTimespec secZero2 = new StructTimespec(0, 42); 134 135 StructTimespec nsecZero1 = new StructTimespec(23, 0); 136 StructTimespec nsecZero2 = new StructTimespec(23, 0); 137 138 // Equal objects should have same hash code 139 assertEquals(allZero1.hashCode(), allZero2.hashCode()); 140 assertEquals(val1.hashCode(), val2.hashCode()); 141 assertEquals(secZero1.hashCode(), secZero2.hashCode()); 142 assertEquals(nsecZero1.hashCode(), nsecZero2.hashCode()); 143 } 144} 145