| 162 | } // end namespace |
| 163 | |
| 164 | TEST(VariantOpCopyTest, CreateConstOnCPU) { |
| 165 | Scope root = Scope::NewRootScope().WithDevice("/cpu:0"); |
| 166 | |
| 167 | // Create the input StoredTensorValue and serialize it. |
| 168 | StoredTensorValue from; |
| 169 | from.stored = Tensor(DT_INT64, TensorShape({})); |
| 170 | from.stored.scalar<int64>()() = 0xdeadbeef; |
| 171 | VariantTensorData data; |
| 172 | data.set_type_name(from.TypeName()); |
| 173 | from.Encode(&data); |
| 174 | |
| 175 | TensorProto variant_proto; |
| 176 | variant_proto.set_dtype(DT_VARIANT); |
| 177 | TensorShape scalar_shape({}); |
| 178 | scalar_shape.AsProto(variant_proto.mutable_tensor_shape()); |
| 179 | data.ToProto(variant_proto.add_variant_val()); |
| 180 | |
| 181 | Output create_const = ops::ConstFromProto(root, variant_proto); |
| 182 | TF_ASSERT_OK(root.status()); |
| 183 | ClientSession session(root); |
| 184 | std::vector<Tensor> outputs; |
| 185 | TF_CHECK_OK(session.Run({create_const}, &outputs)); |
| 186 | EXPECT_EQ(1, outputs.size()); |
| 187 | EXPECT_EQ(DT_VARIANT, outputs[0].dtype()); |
| 188 | EXPECT_EQ(0, outputs[0].dims()); |
| 189 | const Variant& variant = outputs[0].scalar<Variant>()(); |
| 190 | EXPECT_EQ("StoredTensorValue", variant.TypeName()); |
| 191 | const StoredTensorValue* to = variant.get<StoredTensorValue>(); |
| 192 | EXPECT_EQ(to->stored.dtype(), DT_INT64); |
| 193 | EXPECT_EQ(0xdeadbeef, to->stored.scalar<int64>()()); |
| 194 | } |
| 195 | |
| 196 | TEST(VariantOpCopyTest, CreateConstOnGPU) { |
| 197 | if (!IsGoogleCudaEnabled()) return; |
nothing calls this directly
no test coverage detected