public static Expression literalExprFrom(Enum<?> input) {
        return input == null ? new NullLiteralExpr() :
                new NameExpr(input.getClass().getCanonicalName() + "." + input.name());
    }
@Test
    void literalExprFromDataType() {
        Map<DATA_TYPE, String> inputMap = new HashMap<>();
        inputMap.put(DATA_TYPE.STRING, "TEST");
        inputMap.put(DATA_TYPE.INTEGER, "1");
        inputMap.put(DATA_TYPE.FLOAT, "2.0");
        inputMap.put(DATA_TYPE.DOUBLE, "3.0");
        inputMap.put(DATA_TYPE.BOOLEAN, "true");
        inputMap.put(DATA_TYPE.DATE, "2021-06-01");
        inputMap.put(DATA_TYPE.TIME, "11:21:31");
        inputMap.put(DATA_TYPE.DATE_TIME, "2021-06-01T11:21:31");
        inputMap.put(DATA_TYPE.DATE_DAYS_SINCE_0, "10");
        inputMap.put(DATA_TYPE.DATE_DAYS_SINCE_1960, "20");
        inputMap.put(DATA_TYPE.DATE_DAYS_SINCE_1970, "30");
        inputMap.put(DATA_TYPE.DATE_DAYS_SINCE_1980, "40");
        inputMap.put(DATA_TYPE.TIME_SECONDS, "50");
        inputMap.put(DATA_TYPE.DATE_TIME_SECONDS_SINCE_0, "60");
        inputMap.put(DATA_TYPE.DATE_TIME_SECONDS_SINCE_1960, "70");
        inputMap.put(DATA_TYPE.DATE_TIME_SECONDS_SINCE_1970, "80");
        inputMap.put(DATA_TYPE.DATE_TIME_SECONDS_SINCE_1980, "90");

        for (Map.Entry<DATA_TYPE, String> input : inputMap.entrySet()) {
            assertThat(literalExprFrom(input.getKey(), null)).isInstanceOf(NullLiteralExpr.class);

            Expression output = literalExprFrom(input.getKey(), input.getValue());
            switch (input.getKey()) {
                case STRING:
                    assertThat(output).isInstanceOf(StringLiteralExpr.class);
                    break;
                case INTEGER:
                    assertThat(output).isInstanceOf(IntegerLiteralExpr.class);
                    break;
                case DOUBLE:
                case FLOAT:
                    assertThat(output).isInstanceOf(DoubleLiteralExpr.class);
                    break;
                case BOOLEAN:
                    assertThat(output).isInstanceOf(BooleanLiteralExpr.class);
                    break;
                case DATE:
                case TIME:
                case DATE_TIME:
                    assertThat(output).isInstanceOf(MethodCallExpr.class);
                    break;
                case DATE_DAYS_SINCE_0:
                case DATE_DAYS_SINCE_1960:
                case DATE_DAYS_SINCE_1970:
                case DATE_DAYS_SINCE_1980:
                case TIME_SECONDS:
                case DATE_TIME_SECONDS_SINCE_0:
                case DATE_TIME_SECONDS_SINCE_1960:
                case DATE_TIME_SECONDS_SINCE_1970:
                case DATE_TIME_SECONDS_SINCE_1980:
                    assertThat(output).isInstanceOf(LongLiteralExpr.class);
            }
        }

        assertThatIllegalArgumentException().isThrownBy(() -> literalExprFrom(null, null));
        assertThatIllegalArgumentException().isThrownBy(() -> literalExprFrom(null, "test"));
    }