package com.baiyue.common.event; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; class EventPayloadCanonicalizerTest { private final ObjectMapper json = new ObjectMapper(); @Test void equivalentNumberLexemesHaveTheSameCanonicalFormAndHash() throws Exception { var scaled = json.readTree("{\"weight\":30.0,\"volume\":0.3150,\"quantity\":3}"); var normalized = json.readTree("{\"quantity\":3.0,\"volume\":0.315,\"weight\":3E+1}"); assertArrayEquals(EventPayloadCanonicalizer.canonicalize(scaled), EventPayloadCanonicalizer.canonicalize(normalized)); assertEquals(EventPayloadHash.sha256(EventPayloadCanonicalizer.canonicalize(scaled)), EventPayloadHash.sha256(EventPayloadCanonicalizer.canonicalize(normalized))); } @Test void negativeZeroIsZeroAndLegacyHashRemainsAvailable() throws Exception { var negativeZero = json.readTree("{\"value\":-0.000}"); var zero = json.readTree("{\"value\":0}"); assertArrayEquals(EventPayloadCanonicalizer.canonicalize(negativeZero), EventPayloadCanonicalizer.canonicalize(zero)); assertNotEquals(EventPayloadHash.sha256(EventPayloadCanonicalizer.canonicalize(negativeZero)), EventPayloadHash.sha256(EventPayloadCanonicalizer.canonicalizeLegacy(negativeZero))); } }