{-# OPTIONS --cubical --safe #-} module Data.Binary.FromZeroed where open import Data.Binary.Definition open import Prelude inc-z : 𝔹 → 𝔹 inc-z 0ᵇ = 2ᵇ 0ᵇ inc-z (1ᵇ xs) = 2ᵇ xs inc-z (2ᵇ xs) = 1ᵇ inc-z xs toZ : 𝔹 → 𝔹 toZ 0ᵇ = 0ᵇ toZ (1ᵇ xs) = 2ᵇ toZ xs toZ (2ᵇ xs) = 1ᵇ inc-z (toZ xs) ones : ℕ → 𝔹 → 𝔹 ones zero xs = xs ones (suc n) xs = 1ᵇ ones n xs fromZ₁ : ℕ → 𝔹 → 𝔹 fromZ₁ n 0ᵇ = 0ᵇ fromZ₁ n (1ᵇ xs) = fromZ₁ (suc n) xs fromZ₁ n (2ᵇ xs) = 2ᵇ ones n (fromZ₁ 0 xs) fromZ : 𝔹 → 𝔹 fromZ 0ᵇ = 0ᵇ fromZ (1ᵇ xs) = fromZ₁ zero xs fromZ (2ᵇ xs) = 1ᵇ fromZ xs import Data.Binary.Conversion.Fast as Fast open import Data.List using (List; _⋯_; map) round-trip : ℕ → Type round-trip n = map (fromZ ∘ toZ) nums ≡ nums where nums : List 𝔹 nums = map Fast.⟦_⇑⟧ (0 ⋯ n) _ : round-trip 300 _ = refl