src/HOL/Codegenerator_Test/Generate_Target_String_Literals.thy
author haftmann
Mon, 20 Jan 2025 22:15:11 +0100
changeset 81876 ac0716ca151b
parent 81761 a1dc03194053
child 81999 513f8fa74c82
permissions -rw-r--r--
systematic checks for bit operations and more rules on symbolic terms
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
81761
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     1
(* Author: Florian Haftmann, TU Muenchen *)
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     2
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     3
section \<open>Test of target-language string literal operations\<close>
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     4
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     5
theory Generate_Target_String_Literals
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     6
imports
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     7
  "HOL-Library.Code_Test"
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     8
begin
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
     9
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    10
definition computations where
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    11
  \<open>computations = (
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    12
    STR ''abc'' + STR 0x20 + STR ''def'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    13
    String.implode ''abc'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    14
    String.explode STR ''abc'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    15
    String.literal_of_asciis [10, 20, 30, 40, 1111, 2222, 3333],
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    16
    size (STR ''abc''),
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    17
    STR ''def'' \<le> STR ''abc'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    18
    STR ''abc'' < STR ''def''
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    19
  )\<close>
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    20
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    21
definition results where
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    22
  \<open>results = (
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    23
    STR ''abc def'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    24
    STR ''abc'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    25
    ''abc'',
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    26
    STR ''\<newline>'' + STR 0x14 + STR 0x1E + STR ''(W.'' + STR 0x05,
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    27
    3,
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    28
    False,
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    29
    True
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    30
  )\<close>
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    31
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    32
definition check where
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    33
  \<open>check \<longleftrightarrow> computations = results\<close>
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    34
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    35
lemma check
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    36
  by code_simp
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    37
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    38
lemma check
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    39
  by normalization
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    40
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    41
lemma check
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    42
  by eval
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    43
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    44
test_code check in OCaml
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    45
test_code check in GHC
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    46
test_code check in Scala
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    47
a1dc03194053 more correct code generation for string literals
haftmann
parents:
diff changeset
    48
end