/*
* Copyright (C) 2012-2015 DataStax Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datastax.driver.core;
import com.datastax.driver.core.utils.Bytes;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import static org.assertj.core.api.Assertions.assertThat;
/**
* This class provides sample values for each primitive data type.
* <p/>
* These values have no particular meaning, the goal is just to have an instance that can be used in automated tests.
*/
public class PrimitiveTypeSamples {
static Map<DataType, Object> samples(ProtocolVersion protocolVersion) {
try {
final Collection<DataType> primitiveTypes = TestUtils.allPrimitiveTypes(protocolVersion);
ImmutableMap<DataType, Object> data = ImmutableMap.<DataType, Object>builder()
.put(DataType.ascii(), "ascii")
.put(DataType.bigint(), Long.MAX_VALUE)
.put(DataType.blob(), Bytes.fromHexString("0xCAFE"))
.put(DataType.cboolean(), Boolean.TRUE)
.put(DataType.decimal(), new BigDecimal("12.3E+7"))
.put(DataType.cdouble(), Double.MAX_VALUE)
.put(DataType.cfloat(), Float.MAX_VALUE)
.put(DataType.inet(), InetAddress.getByName("123.123.123.123"))
.put(DataType.tinyint(), Byte.MAX_VALUE)
.put(DataType.smallint(), Short.MAX_VALUE)
.put(DataType.cint(), Integer.MAX_VALUE)
.put(DataType.duration(), Duration.from("PT30H20M"))
.put(DataType.text(), "text")
.put(DataType.timestamp(), new Date(872835240000L))
.put(DataType.date(), LocalDate.fromDaysSinceEpoch(16071))
.put(DataType.time(), 54012123450000L)
.put(DataType.timeuuid(), UUID.fromString("FE2B4360-28C6-11E2-81C1-0800200C9A66"))
.put(DataType.uuid(), UUID.fromString("067e6162-3b6f-4ae2-a171-2470b63dff00"))
.put(DataType.varint(), new BigInteger(Integer.toString(Integer.MAX_VALUE) + "000"))
.build();
// Only include data types that support the desired protocol version.
Map<DataType, Object> result = Maps.filterKeys(data, new Predicate<DataType>() {
@Override
public boolean apply(DataType input) {
return primitiveTypes.contains(input);
}
});
// Check that we cover all types (except counter and duration)
// Duration is excluded because it can't be used in collections and udts. It is tested separately
// in DurationIntegrationTest.
List<DataType> tmp = Lists.newArrayList(primitiveTypes);
tmp.removeAll(result.keySet());
List<DataType> expectedFilteredTypes = Lists.newArrayList(DataType.counter());
assertThat(tmp)
.as("new datatype not covered in test")
.containsOnlyElementsOf(expectedFilteredTypes);
return result;
} catch (UnknownHostException e) {
throw new AssertionError(e);
}
}
}