/*=============================================================================#
 # Copyright (c) 2021, 2022 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.jcommons.collections;

import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

import org.eclipse.statet.internal.jcommons.collections.ImLongEmptyList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;


@NonNullByDefault
public class ImLongEmptyListTest extends AbstractImLongListTest {
	
	
	public ImLongEmptyListTest() {
	}
	
	
	@Override
	protected ImLongList createList(final long value0) {
		return ImLongEmptyList.INSTANCE;
	}
	
	@Override
	protected int getExpectedSize() {
		return 0;
	}
	
	
	@Test
	@Override
	public void equals() {
		super.equals();
		assertTrue(this.list.equals(ImCollections.emptyLongList()));
	}
	
}
