// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final IFn Assoc = var("clojure.core/assoc");
// 
// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final Object Default = read(":default");
// 
// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final Map EmptyMap = (Map) read("{}");
// 
// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final IFn ReadString = var("clojure.edn/read-string");


import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.Assoc;
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.Default;
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.EmptyMap;
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.ReadString;
import static org.junit.jupiter.api.Assertions.assertEquals;
import clojure.lang.AFn;
package com.github.rschmitt.dynamicobject;



public class TestUtils {
    private static final Object readerOpts = Assoc.invoke(EmptyMap, Default, getUnknownReader());

    private static Object getUnknownReader() {
        return new AFn() {
            @Override
            public Object invoke(Object arg1, Object arg2) {
                return new Unknown(arg1.toString(), arg2);
            }
        };
    }

    public static Object genericRead(String str) {
        return ReadString.invoke(readerOpts, str);
    }

    public static void assertEquivalent(String expected, String actual) {
        assertEquals(genericRead(expected), genericRead(actual));
    }

// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final IFn Assoc = var("clojure.core/assoc");
// 
// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final Object Default = read(":default");
// 
// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final Map EmptyMap = (Map) read("{}");
// 
// Path: src/main/java/com/github/rschmitt/dynamicobject/internal/ClojureStuff.java
// public static final IFn ReadString = var("clojure.edn/read-string");


// Path: src/test/java/com/github/rschmitt/dynamicobject/TestUtils.java
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.Assoc;
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.Default;
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.EmptyMap;
import static com.github.rschmitt.dynamicobject.internal.ClojureStuff.ReadString;
import static org.junit.jupiter.api.Assertions.assertEquals;
import clojure.lang.AFn;

package com.github.rschmitt.dynamicobject;



public class TestUtils {
    private static final Object readerOpts = Assoc.invoke(EmptyMap, Default, getUnknownReader());

    private static Object getUnknownReader() {
        return new AFn() {
            @Override
            public Object invoke(Object arg1, Object arg2) {
                return new Unknown(arg1.toString(), arg2);
            }
        };
    }

    public static Object genericRead(String str) {
        return ReadString.invoke(readerOpts, str);
    }

    public static void assertEquivalent(String expected, String actual) {
        assertEquals(genericRead(expected), genericRead(actual));
    }

    public static void assertEquivalent(String message, String expected, String actual) {