code: def test_generate_features_from_primitives(
      col_defs, primitives, expected
  ):
      input_feature_names = set([x[0] for x in col_defs])
      df = generate_fake_dataframe(
          col_defs=col_defs,
      )
  
      origin_features = schema_to_features(df.ww.schema)
      features = generate_features_from_primitives(
          origin_features, primitives
      )
  
      new_feature_names = (
          set([x.name for x in features]) - input_feature_names
      )
      assert new_feature_names == expected
  
imports: from unittest.mock import patch
  import pytest
  from woodwork.column_schema import ColumnSchema
  from woodwork.logical_types import Boolean, BooleanNullable, Datetime, Double, NaturalLanguage, Ordinal
  from featuretools.entityset.entityset import EntitySet
  from featuretools.feature_discovery.feature_discovery import _get_features, _get_matching_features, _index_column_set, generate_features_from_primitives, schema_to_features
  from featuretools.feature_discovery.FeatureCollection import FeatureCollection
  from featuretools.feature_discovery.LiteFeature import LiteFeature
  from featuretools.feature_discovery.utils import column_schema_to_keys
  from featuretools.primitives import Absolute, AddNumeric, Count, DateFirstEvent, Equal, Lag, MultiplyNumericBoolean, NumUnique, TransformPrimitive
  from featuretools.primitives.utils import get_transform_primitives
  from featuretools.synthesis import dfs
  from featuretools.tests.testing_utils.generate_fake_dataframe import generate_fake_dataframe
label_desc: Use image node_id 5 for calling a global function with example usage: test_generate_features_from_primitives(col_defs, primitives, expected) without return types